11584 lines
432 KiB
TypeScript
11584 lines
432 KiB
TypeScript
// @ts-nocheck — generated from scribe-admin OpenAPI; reference only
|
||
/**
|
||
* This file was auto-generated by openapi-typescript.
|
||
* Do not make direct changes to the file.
|
||
*/
|
||
|
||
export interface paths {
|
||
"/api/admin/v1/dimzou/documents": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** [文档监控] 文档列表 */
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 可选。按状态过滤: active(活跃), archived(已归档), trashed(回收站), all(默认)。 示例: active
|
||
* @example architecto
|
||
*/
|
||
state?: string;
|
||
/**
|
||
* @description 可选。按所有者过滤。 示例: 01HXXXX
|
||
* @example architecto
|
||
*/
|
||
owner_uid?: string;
|
||
/**
|
||
* @description 可选。按标题模糊搜索。 示例: 旅行
|
||
* @example architecto
|
||
*/
|
||
q?: string;
|
||
/**
|
||
* @description 可选。页码。 示例: 1
|
||
* @example 16
|
||
*/
|
||
page?: number;
|
||
/**
|
||
* @description 可选。每页数量,最大100。 示例: 20
|
||
* @example 16
|
||
*/
|
||
page_size?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @example trashed
|
||
* @enum {string|null}
|
||
*/
|
||
state?: "active" | "archived" | "trashed" | "all" | null;
|
||
/** @example architecto */
|
||
owner_uid?: string | null;
|
||
/**
|
||
* @description Must not be greater than 100 characters.
|
||
* @example n
|
||
*/
|
||
q?: string | null;
|
||
/**
|
||
* @description Must be at least 1.
|
||
* @example 67
|
||
*/
|
||
page?: number | null;
|
||
/**
|
||
* @description Must be at least 1. Must not be greater than 100.
|
||
* @example 16
|
||
*/
|
||
page_size?: number | null;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "dimzou_document",
|
||
* "id": 16,
|
||
* "title": "三天短途旅行打包清单",
|
||
* "owner": {
|
||
* "uid": "01HXXXX",
|
||
* "display_name": "Alice"
|
||
* },
|
||
* "category": {
|
||
* "id": "9f1c...",
|
||
* "name": "生活"
|
||
* },
|
||
* "state": "active",
|
||
* "versions_count": 2,
|
||
* "published_version": 1,
|
||
* "draft_version": 2,
|
||
* "archived_at": null,
|
||
* "deleted_at": null,
|
||
* "created_at": "2026-06-20T05:00:00Z",
|
||
* "updated_at": "2026-06-21T05:00:00Z"
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example dimzou_document */
|
||
kind?: string;
|
||
/** @example 16 */
|
||
id?: number;
|
||
/** @example 三天短途旅行打包清单 */
|
||
title?: string;
|
||
owner?: {
|
||
/** @example 01HXXXX */
|
||
uid?: string;
|
||
/** @example Alice */
|
||
display_name?: string;
|
||
};
|
||
category?: {
|
||
/** @example 9f1c... */
|
||
id?: string;
|
||
/** @example 生活 */
|
||
name?: string;
|
||
};
|
||
/** @example active */
|
||
state?: string;
|
||
/** @example 2 */
|
||
versions_count?: number;
|
||
/** @example 1 */
|
||
published_version?: number;
|
||
/** @example 2 */
|
||
draft_version?: number;
|
||
/** @example null */
|
||
archived_at?: string;
|
||
/** @example null */
|
||
deleted_at?: string;
|
||
/** @example 2026-06-20T05:00:00Z */
|
||
created_at?: string;
|
||
/** @example 2026-06-21T05:00:00Z */
|
||
updated_at?: string;
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/dimzou/documents/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 文档 ID。
|
||
* @example 16
|
||
*/
|
||
id: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [文档监控] 文档详情
|
||
* @description 含版本列表、译文列表与待审计数。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 文档 ID。
|
||
* @example 16
|
||
*/
|
||
id: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example dimzou_document */
|
||
kind?: string;
|
||
/** @example 16 */
|
||
id?: number;
|
||
/** @example 三天短途旅行打包清单 */
|
||
title?: string;
|
||
/** @example active */
|
||
state?: string;
|
||
/** @example [] */
|
||
versions?: unknown[];
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "id": 4,
|
||
* "language_code": "en",
|
||
* "status": "draft",
|
||
* "translated_document_id": 17,
|
||
* "created_by_uid": "01HXXXX",
|
||
* "created_at": "2026-06-20T05:32:14Z"
|
||
* }
|
||
* ]
|
||
*/
|
||
translations?: {
|
||
/** @example 4 */
|
||
id?: number;
|
||
/** @example en */
|
||
language_code?: string;
|
||
/** @example draft */
|
||
status?: string;
|
||
/** @example 17 */
|
||
translated_document_id?: number;
|
||
/** @example 01HXXXX */
|
||
created_by_uid?: string;
|
||
/** @example 2026-06-20T05:32:14Z */
|
||
created_at?: string;
|
||
}[];
|
||
/** @example 3 */
|
||
pending_revisions_count?: number;
|
||
/** @example 1 */
|
||
pending_join_requests_count?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/dimzou/publications": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** [发布监控] 发布列表 */
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 可选。按可见性过滤: public, group_only。 示例: public
|
||
* @example architecto
|
||
*/
|
||
visibility?: string;
|
||
/**
|
||
* @description 可选。按语言过滤。 示例: zh-CN
|
||
* @example architecto
|
||
*/
|
||
language?: string;
|
||
/**
|
||
* @description 可选。按源文档过滤。 示例: 16
|
||
* @example 16
|
||
*/
|
||
document_id?: number;
|
||
/**
|
||
* @description 可选。按标题模糊搜索。 示例: 旅行
|
||
* @example architecto
|
||
*/
|
||
q?: string;
|
||
/**
|
||
* @description 可选。页码。 示例: 1
|
||
* @example 16
|
||
*/
|
||
page?: number;
|
||
/**
|
||
* @description 可选。每页数量,最大100。 示例: 20
|
||
* @example 16
|
||
*/
|
||
page_size?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @example group_only
|
||
* @enum {string|null}
|
||
*/
|
||
visibility?: "public" | "group_only" | null;
|
||
/**
|
||
* @description Must not be greater than 8 characters.
|
||
* @example bngzmiyv
|
||
*/
|
||
language?: string | null;
|
||
/** @example 16 */
|
||
document_id?: number | null;
|
||
/**
|
||
* @description Must not be greater than 100 characters.
|
||
* @example n
|
||
*/
|
||
q?: string | null;
|
||
/**
|
||
* @description Must be at least 1.
|
||
* @example 67
|
||
*/
|
||
page?: number | null;
|
||
/**
|
||
* @description Must be at least 1. Must not be greater than 100.
|
||
* @example 16
|
||
*/
|
||
page_size?: number | null;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "dimzou_publication",
|
||
* "id": 3,
|
||
* "document_id": 16,
|
||
* "document_version_id": 20,
|
||
* "version_number": 1,
|
||
* "visibility": "public",
|
||
* "title": "三天短途旅行打包清单",
|
||
* "summary": "轻装出行指南",
|
||
* "language": "zh-CN",
|
||
* "keywords": [
|
||
* "旅行"
|
||
* ],
|
||
* "published_at": "2026-06-21T05:00:00Z",
|
||
* "block_count": 12,
|
||
* "author": {
|
||
* "uid": "01HXXXX",
|
||
* "display_name": "Alice"
|
||
* }
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example dimzou_publication */
|
||
kind?: string;
|
||
/** @example 3 */
|
||
id?: number;
|
||
/** @example 16 */
|
||
document_id?: number;
|
||
/** @example 20 */
|
||
document_version_id?: number;
|
||
/** @example 1 */
|
||
version_number?: number;
|
||
/** @example public */
|
||
visibility?: string;
|
||
/** @example 三天短途旅行打包清单 */
|
||
title?: string;
|
||
/** @example 轻装出行指南 */
|
||
summary?: string;
|
||
/** @example zh-CN */
|
||
language?: string;
|
||
/**
|
||
* @example [
|
||
* "旅行"
|
||
* ]
|
||
*/
|
||
keywords?: string[];
|
||
/** @example 2026-06-21T05:00:00Z */
|
||
published_at?: string;
|
||
/** @example 12 */
|
||
block_count?: number;
|
||
author?: {
|
||
/** @example 01HXXXX */
|
||
uid?: string;
|
||
/** @example Alice */
|
||
display_name?: string;
|
||
};
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/dimzou/translations": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [运营] 译文列表
|
||
* @description 分页列出全站译文档,含最新草稿版本的块翻译进度,用于决定是否重新入队翻译。仅平台管理员可用。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 可选。按目标语言过滤。 示例: fr
|
||
* @example architecto
|
||
*/
|
||
language_code?: string;
|
||
/**
|
||
* @description 可选。按状态过滤: draft, awaiting_publish, published。 示例: draft
|
||
* @example architecto
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 可选。按源文档过滤。 示例: 1
|
||
* @example 16
|
||
*/
|
||
source_document_id?: number;
|
||
/**
|
||
* @description 可选。页码。 示例: 1
|
||
* @example 16
|
||
*/
|
||
page?: number;
|
||
/**
|
||
* @description 可选。每页数量,最大100。 示例: 20
|
||
* @example 16
|
||
*/
|
||
page_size?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description Must not be greater than 8 characters.
|
||
* @example bngzmiyv
|
||
*/
|
||
language_code?: string;
|
||
/**
|
||
* @example published
|
||
* @enum {string}
|
||
*/
|
||
status?: "draft" | "awaiting_publish" | "published";
|
||
/** @example 16 */
|
||
source_document_id?: number;
|
||
/**
|
||
* @description Must be at least 1.
|
||
* @example 22
|
||
*/
|
||
page?: number;
|
||
/**
|
||
* @description Must be at least 1. Must not be greater than 100.
|
||
* @example 7
|
||
*/
|
||
page_size?: number;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "dimzou_document_translation",
|
||
* "id": 1,
|
||
* "language_code": "fr",
|
||
* "status": "draft",
|
||
* "source_document": {
|
||
* "id": 10,
|
||
* "title": "家电维修入门"
|
||
* },
|
||
* "translated_document_id": 11,
|
||
* "created_by_uid": "01HXXXX",
|
||
* "creator": {
|
||
* "uid": "01HXXXX",
|
||
* "display_name": "Alice"
|
||
* },
|
||
* "draft_version_id": 5,
|
||
* "blocks": {
|
||
* "total": 12,
|
||
* "needs_translation": 3,
|
||
* "translation_failed": 1
|
||
* },
|
||
* "created_at": "2026-06-01T10:00:00Z",
|
||
* "updated_at": "2026-06-02T10:00:00Z"
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example dimzou_document_translation */
|
||
kind?: string;
|
||
/** @example 1 */
|
||
id?: number;
|
||
/** @example fr */
|
||
language_code?: string;
|
||
/** @example draft */
|
||
status?: string;
|
||
source_document?: {
|
||
/** @example 10 */
|
||
id?: number;
|
||
/** @example 家电维修入门 */
|
||
title?: string;
|
||
};
|
||
/** @example 11 */
|
||
translated_document_id?: number;
|
||
/** @example 01HXXXX */
|
||
created_by_uid?: string;
|
||
creator?: {
|
||
/** @example 01HXXXX */
|
||
uid?: string;
|
||
/** @example Alice */
|
||
display_name?: string;
|
||
};
|
||
/** @example 5 */
|
||
draft_version_id?: number;
|
||
blocks?: {
|
||
/** @example 12 */
|
||
total?: number;
|
||
/** @example 3 */
|
||
needs_translation?: number;
|
||
/** @example 1 */
|
||
translation_failed?: number;
|
||
};
|
||
/** @example 2026-06-01T10:00:00Z */
|
||
created_at?: string;
|
||
/** @example 2026-06-02T10:00:00Z */
|
||
updated_at?: string;
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/dimzou/translations/{translation_id}/retranslate": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the translation.
|
||
* @example 1
|
||
*/
|
||
translation_id: number;
|
||
/**
|
||
* @description Translation ID.
|
||
* @example 1
|
||
*/
|
||
translation: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* [运营] 重新机器翻译
|
||
* @description 将译文档最新草稿版本中"待译/失败"的块重新入队翻译。仅平台管理员可用。
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the translation.
|
||
* @example 1
|
||
*/
|
||
translation_id: number;
|
||
/**
|
||
* @description Translation ID.
|
||
* @example 1
|
||
*/
|
||
translation: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example 5 */
|
||
translation_version_id?: number;
|
||
/** @example 12 */
|
||
queued_blocks?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example No translation draft to re-translate. */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/category-briefs": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [内容分类简报] 列表
|
||
* @description 分页返回分类内容简报(每个分类一份,含子话题/作者/文章聚合计数)。
|
||
* 可按 category_id 过滤。需要 admin:studio:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 按所属分类过滤(UUID)。
|
||
* @example 9f1c2d3e-4b5a-6789-0abc-def012345678
|
||
*/
|
||
category_id?: string;
|
||
/**
|
||
* @description 每页数量,1-100,默认 20。
|
||
* @example 20
|
||
*/
|
||
page_size?: number;
|
||
/**
|
||
* @description 页码,默认 1。
|
||
* @example 1
|
||
*/
|
||
page?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "studio_category_brief",
|
||
* "id": "9f1c2d3e-4b5a-6789-0abc-def012345678",
|
||
* "category_id": "1a2b...",
|
||
* "description": "家电清洗与维修相关内容",
|
||
* "target_audience": "有家电保养需求的家庭用户",
|
||
* "subtopic_count": 12,
|
||
* "author_count": 3,
|
||
* "article_count": 40
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example studio_category_brief */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example 1a2b... */
|
||
category_id?: string;
|
||
/** @example 家电清洗与维修相关内容 */
|
||
description?: string;
|
||
/** @example 有家电保养需求的家庭用户 */
|
||
target_audience?: string;
|
||
/** @example 12 */
|
||
subtopic_count?: number;
|
||
/** @example 3 */
|
||
author_count?: number;
|
||
/** @example 40 */
|
||
article_count?: number;
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
/**
|
||
* [内容分类简报] 创建
|
||
* @description 为某个分类新建内容简报。聚合计数(subtopic_count 等)由系统维护,不可写入。
|
||
* 需要 admin:studio:manage 权限。
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 所属分类 UUID。
|
||
* @example 9f1c2d3e-4b5a-6789-0abc-def012345678
|
||
*/
|
||
category_id: string;
|
||
/**
|
||
* @description 分类内容定位描述。
|
||
* @example 家电清洗与维修相关内容
|
||
*/
|
||
description?: string;
|
||
/**
|
||
* @description 目标读者。
|
||
* @example 有家电保养需求的家庭用户
|
||
*/
|
||
target_audience?: string;
|
||
/**
|
||
* @description 内容切入角度列表。
|
||
* @example [
|
||
* "清洗周期",
|
||
* "自检清单",
|
||
* "故障排查"
|
||
* ]
|
||
*/
|
||
content_angles?: string[];
|
||
/**
|
||
* @description 内容风险/合规备注。
|
||
* @example 涉及电器安全,需提示断电操作
|
||
*/
|
||
risk_notes?: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_category_brief */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example 1a2b... */
|
||
category_id?: string;
|
||
/** @example 家电清洗与维修相关内容 */
|
||
description?: string;
|
||
/** @example 0 */
|
||
subtopic_count?: number;
|
||
/** @example 0 */
|
||
author_count?: number;
|
||
/** @example 0 */
|
||
article_count?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "The category id field is required."
|
||
* ]
|
||
*/
|
||
category_id?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/category-briefs/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category brief.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* 获取详情
|
||
* @description 按 UUID 获取单个 Studio 实体,返回其全部属性(含 kind 判别字段)。
|
||
* 需要 admin:studio:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category brief.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_subtopic */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example active */
|
||
status?: string;
|
||
/** @example 2026-07-18T09:00:00.000000Z */
|
||
created_at?: string;
|
||
/** @example 2026-07-18T09:00:00.000000Z */
|
||
updated_at?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/subtopics": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [子话题] 列表
|
||
* @description 分页返回子话题,可按 category_id、status 过滤。需要 admin:studio:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 按所属分类过滤(UUID)。
|
||
* @example 9f1c2d3e-4b5a-6789-0abc-def012345678
|
||
*/
|
||
category_id?: string;
|
||
/**
|
||
* @description 按状态过滤:active, archived。
|
||
* @example active
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 每页数量,1-100,默认 20。
|
||
* @example 20
|
||
*/
|
||
page_size?: number;
|
||
/**
|
||
* @description 页码,默认 1。
|
||
* @example 1
|
||
*/
|
||
page?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "studio_subtopic",
|
||
* "id": "9f1c2d3e-4b5a-6789-0abc-def012345678",
|
||
* "category_id": "1a2b...",
|
||
* "title": "空调清洗保养指南",
|
||
* "target_audience": "家庭用户",
|
||
* "expandability_score": 80,
|
||
* "status": "active"
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example studio_subtopic */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example 1a2b... */
|
||
category_id?: string;
|
||
/** @example 空调清洗保养指南 */
|
||
title?: string;
|
||
/** @example 家庭用户 */
|
||
target_audience?: string;
|
||
/** @example 80 */
|
||
expandability_score?: number;
|
||
/** @example active */
|
||
status?: string;
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
/**
|
||
* [子话题] 创建
|
||
* @description 在某分类下新建子话题。需要 admin:studio:manage 权限。
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 所属分类 UUID。
|
||
* @example 9f1c2d3e-4b5a-6789-0abc-def012345678
|
||
*/
|
||
category_id: string;
|
||
/**
|
||
* @description 子话题标题,最长 255。
|
||
* @example 空调清洗保养指南
|
||
*/
|
||
title: string;
|
||
/**
|
||
* @description 目标读者。
|
||
* @example 家庭用户
|
||
*/
|
||
target_audience?: string;
|
||
/**
|
||
* @description 读者痛点。
|
||
* @example 不清楚多久该洗一次空调
|
||
*/
|
||
pain_points?: string;
|
||
/**
|
||
* @description 内容价值主张。
|
||
* @example 给出清洗周期与自检清单
|
||
*/
|
||
content_value?: string;
|
||
/**
|
||
* @description 可扩展性评分,0-10。
|
||
* @example 8
|
||
*/
|
||
expandability_score?: number;
|
||
/**
|
||
* @description 状态:active, archived。默认 active。
|
||
* @example active
|
||
*/
|
||
status?: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_subtopic */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example 空调清洗保养指南 */
|
||
title?: string;
|
||
/** @example active */
|
||
status?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "The title field is required."
|
||
* ]
|
||
*/
|
||
title?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/subtopics/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the subtopic.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* 获取详情
|
||
* @description 按 UUID 获取单个 Studio 实体,返回其全部属性(含 kind 判别字段)。
|
||
* 需要 admin:studio:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the subtopic.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_subtopic */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example active */
|
||
status?: string;
|
||
/** @example 2026-07-18T09:00:00.000000Z */
|
||
created_at?: string;
|
||
/** @example 2026-07-18T09:00:00.000000Z */
|
||
updated_at?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/robot-authors": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [机器人作者] 列表
|
||
* @description 分页返回机器人作者,附带绑定账号的公开身份(display_name / avatar)与账号级人设
|
||
* (persona / 风格 / 发布规则)。可按 user_uid、category_id、subtopic_id、status、source 过滤。
|
||
* 需要 admin:studio:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 按绑定的机器人账号 uid 过滤。
|
||
* @example 01HXXXXAUTHORBOT
|
||
*/
|
||
user_uid?: string;
|
||
/**
|
||
* @description 按所属分类过滤(UUID)。
|
||
* @example 1a2b3c4d-5e6f-7081-9234-abcdef012345
|
||
*/
|
||
category_id?: string;
|
||
/**
|
||
* @description 按所属子话题过滤(UUID)。
|
||
* @example 2b3c4d5e-6f70-8912-3abc-def012345678
|
||
*/
|
||
subtopic_id?: string;
|
||
/**
|
||
* @description 按状态过滤:pending, profiling, ready, paused。
|
||
* @example ready
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 按来源过滤:user, category。
|
||
* @example category
|
||
*/
|
||
source?: string;
|
||
/**
|
||
* @description 每页数量,1-100,默认 20。
|
||
* @example 20
|
||
*/
|
||
page_size?: number;
|
||
/**
|
||
* @description 页码,默认 1。
|
||
* @example 1
|
||
*/
|
||
page?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "studio_robot_author",
|
||
* "id": "3c4d5e6f-7081-9234-5abc-def012345678",
|
||
* "user_uid": "01HXXXXAUTHORBOT",
|
||
* "category_id": "1a2b...",
|
||
* "status": "ready",
|
||
* "source": "category",
|
||
* "display_name": "家电保养小助手",
|
||
* "avatar": "https://…/avatar.png",
|
||
* "persona": "务实、耐心的家电保养老师傅",
|
||
* "article_style": {
|
||
* "tone": "亲切"
|
||
* },
|
||
* "image_style": {
|
||
* "style": "写实"
|
||
* },
|
||
* "publishing_rules": {
|
||
* "cadence": "每周 2 篇"
|
||
* }
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example studio_robot_author */
|
||
kind?: string;
|
||
/** @example 3c4d5e6f-7081-9234-5abc-def012345678 */
|
||
id?: string;
|
||
/** @example 01HXXXXAUTHORBOT */
|
||
user_uid?: string;
|
||
/** @example 1a2b... */
|
||
category_id?: string;
|
||
/** @example ready */
|
||
status?: string;
|
||
/** @example category */
|
||
source?: string;
|
||
/** @example 家电保养小助手 */
|
||
display_name?: string;
|
||
/** @example https://…/avatar.png */
|
||
avatar?: string;
|
||
/** @example 务实、耐心的家电保养老师傅 */
|
||
persona?: string;
|
||
article_style?: {
|
||
/** @example 亲切 */
|
||
tone?: string;
|
||
};
|
||
image_style?: {
|
||
/** @example 写实 */
|
||
style?: string;
|
||
};
|
||
publishing_rules?: {
|
||
/** @example 每周 2 篇 */
|
||
cadence?: string;
|
||
};
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
/**
|
||
* [机器人作者] 创建
|
||
* @description 绑定一个机器人账号(必须是 is_robot=true 的用户)作为某分类的内容作者。
|
||
* 人设字段(persona / article_style / image_style / publishing_rules)写入账号级
|
||
* profile,供该账号的所有作者身份与系列共享。需要 admin:studio:manage 权限。
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 机器人账号 uid(须 is_robot=true)。
|
||
* @example 01HXXXXAUTHORBOT
|
||
*/
|
||
user_uid: string;
|
||
/**
|
||
* @description 所属分类 UUID。
|
||
* @example 1a2b3c4d-5e6f-7081-9234-abcdef012345
|
||
*/
|
||
category_id: string;
|
||
/**
|
||
* @description 关联子话题 UUID。
|
||
* @example 2b3c4d5e-6f70-8912-3abc-def012345678
|
||
*/
|
||
subtopic_id?: string;
|
||
/**
|
||
* @description 账号人设描述(写入 profile)。
|
||
* @example 务实、耐心的家电保养老师傅
|
||
*/
|
||
persona?: string;
|
||
/**
|
||
* @description 文章风格配置(写入 profile)。
|
||
* @example {
|
||
* "tone": "亲切",
|
||
* "length": "1200-1800字"
|
||
* }
|
||
*/
|
||
article_style?: Record<string, never>;
|
||
/**
|
||
* @description 配图风格配置(写入 profile)。
|
||
* @example {
|
||
* "style": "写实",
|
||
* "palette": "明亮"
|
||
* }
|
||
*/
|
||
image_style?: Record<string, never>;
|
||
/**
|
||
* @description 发布规则(写入 profile)。
|
||
* @example {
|
||
* "cadence": "每周 2 篇"
|
||
* }
|
||
*/
|
||
publishing_rules?: Record<string, never>;
|
||
/**
|
||
* @description 状态:pending, profiling, ready, paused。默认 pending。
|
||
* @example ready
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 来源:user, category。
|
||
* @example category
|
||
*/
|
||
source?: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_robot_author */
|
||
kind?: string;
|
||
/** @example 3c4d5e6f-7081-9234-5abc-def012345678 */
|
||
id?: string;
|
||
/** @example 01HXXXXAUTHORBOT */
|
||
user_uid?: string;
|
||
/** @example ready */
|
||
status?: string;
|
||
/** @example 家电保养小助手 */
|
||
display_name?: string;
|
||
/** @example 务实、耐心的家电保养老师傅 */
|
||
persona?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "The selected user uid is invalid."
|
||
* ]
|
||
*/
|
||
user_uid?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/robot-authors/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the robot author.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* 获取详情
|
||
* @description 按 UUID 获取单个 Studio 实体,返回其全部属性(含 kind 判别字段)。
|
||
* 需要 admin:studio:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the robot author.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_subtopic */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example active */
|
||
status?: string;
|
||
/** @example 2026-07-18T09:00:00.000000Z */
|
||
created_at?: string;
|
||
/** @example 2026-07-18T09:00:00.000000Z */
|
||
updated_at?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/series": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [文章系列] 列表
|
||
* @description 分页返回文章系列,可按 category_id、subtopic_id、robot_author_id、status 过滤。
|
||
* 需要 admin:studio:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 按所属分类过滤(UUID)。
|
||
* @example 9f1c2d3e-4b5a-6789-0abc-def012345678
|
||
*/
|
||
category_id?: string;
|
||
/**
|
||
* @description 按所属子话题过滤(UUID)。
|
||
* @example 2b3c4d5e-6f70-8912-3abc-def012345678
|
||
*/
|
||
subtopic_id?: string;
|
||
/**
|
||
* @description 按机器人作者过滤(UUID)。
|
||
* @example 3c4d5e6f-7081-9234-5abc-def012345678
|
||
*/
|
||
robot_author_id?: string;
|
||
/**
|
||
* @description 按状态过滤:planned, in_progress, complete。
|
||
* @example in_progress
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 每页数量,1-100,默认 20。
|
||
* @example 20
|
||
*/
|
||
page_size?: number;
|
||
/**
|
||
* @description 页码,默认 1。
|
||
* @example 1
|
||
*/
|
||
page?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "studio_series",
|
||
* "id": "9f1c2d3e-4b5a-6789-0abc-def012345678",
|
||
* "category_id": "1a2b...",
|
||
* "robot_author_id": "3c4d...",
|
||
* "goal": "系统讲透家用空调清洗保养",
|
||
* "target_article_count": 8,
|
||
* "status": "in_progress"
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example studio_series */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example 1a2b... */
|
||
category_id?: string;
|
||
/** @example 3c4d... */
|
||
robot_author_id?: string;
|
||
/** @example 系统讲透家用空调清洗保养 */
|
||
goal?: string;
|
||
/** @example 8 */
|
||
target_article_count?: number;
|
||
/** @example in_progress */
|
||
status?: string;
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
/**
|
||
* [文章系列] 创建
|
||
* @description 为某机器人作者在某分类下规划一个文章系列。需要 admin:studio:manage 权限。
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 所属分类 UUID。
|
||
* @example 9f1c2d3e-4b5a-6789-0abc-def012345678
|
||
*/
|
||
category_id: string;
|
||
/**
|
||
* @description 机器人作者 UUID。
|
||
* @example 3c4d5e6f-7081-9234-5abc-def012345678
|
||
*/
|
||
robot_author_id: string;
|
||
/**
|
||
* @description 关联子话题 UUID。
|
||
* @example 2b3c4d5e-6f70-8912-3abc-def012345678
|
||
*/
|
||
subtopic_id?: string;
|
||
/**
|
||
* @description 系列目标。
|
||
* @example 系统讲透家用空调清洗保养
|
||
*/
|
||
goal?: string;
|
||
/**
|
||
* @description 系列定位。
|
||
* @example 面向新手的保姆级实操
|
||
*/
|
||
positioning?: string;
|
||
/**
|
||
* @description 目标读者。
|
||
* @example 第一次自己清洗空调的家庭用户
|
||
*/
|
||
target_readers?: string;
|
||
/**
|
||
* @description 读者阅读旅程。
|
||
* @example 从认知清洗必要性到能独立完成
|
||
*/
|
||
reader_journey?: string;
|
||
/**
|
||
* @description 计划文章数,>=0。
|
||
* @example 8
|
||
*/
|
||
target_article_count?: number;
|
||
/**
|
||
* @description 计划中的文章大纲列表。
|
||
* @example [
|
||
* []
|
||
* ]
|
||
*/
|
||
planned_articles?: Record<string, never>[];
|
||
/**
|
||
* @description 状态:planned, in_progress, complete。默认 planned。
|
||
* @example planned
|
||
*/
|
||
status?: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_series */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example 系统讲透家用空调清洗保养 */
|
||
goal?: string;
|
||
/** @example planned */
|
||
status?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "The robot author id field is required."
|
||
* ]
|
||
*/
|
||
robot_author_id?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/series/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the series.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* 获取详情
|
||
* @description 按 UUID 获取单个 Studio 实体,返回其全部属性(含 kind 判别字段)。
|
||
* 需要 admin:studio:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the series.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_subtopic */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example active */
|
||
status?: string;
|
||
/** @example 2026-07-18T09:00:00.000000Z */
|
||
created_at?: string;
|
||
/** @example 2026-07-18T09:00:00.000000Z */
|
||
updated_at?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/articles/{article}/preview": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 文章 UUID。
|
||
* @example 9f1c2d3e-4b5a-6789-0abc-def012345678
|
||
*/
|
||
article: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [文章] Dimzou 草稿预览
|
||
* @description 渲染文章当前 Dimzou 草稿(无草稿时回退到最新已发布版本)的正文为 HTML,
|
||
* 连同标题/摘要/封面返回,供后台预览。需要 admin:studio:read 权限,绕过 Dimzou 逐用户读权限。
|
||
*/
|
||
get: operations["Dimzou"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/articles": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [文章] 列表
|
||
* @description 分页返回文章,可按 series_id、robot_author_id、category_id、subtopic_id、status 过滤。
|
||
* 需要 admin:studio:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 按所属系列过滤(UUID)。
|
||
* @example 9f1c2d3e-4b5a-6789-0abc-def012345678
|
||
*/
|
||
series_id?: string;
|
||
/**
|
||
* @description 按机器人作者过滤(UUID)。
|
||
* @example 3c4d5e6f-7081-9234-5abc-def012345678
|
||
*/
|
||
robot_author_id?: string;
|
||
/**
|
||
* @description 按所属分类过滤(UUID)。
|
||
* @example 1a2b3c4d-5e6f-7081-9234-abcdef012345
|
||
*/
|
||
category_id?: string;
|
||
/**
|
||
* @description 按所属子话题过滤(UUID)。
|
||
* @example 2b3c4d5e-6f70-8912-3abc-def012345678
|
||
*/
|
||
subtopic_id?: string;
|
||
/**
|
||
* @description 按状态过滤:planned, drafting, drafted, published, scheduled。
|
||
* @example drafted
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 每页数量,1-100,默认 20。
|
||
* @example 20
|
||
*/
|
||
page_size?: number;
|
||
/**
|
||
* @description 页码,默认 1。
|
||
* @example 1
|
||
*/
|
||
page?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "studio_article",
|
||
* "id": "9f1c2d3e-4b5a-6789-0abc-def012345678",
|
||
* "series_id": "…",
|
||
* "article_number": 1,
|
||
* "title": "空调多久洗一次?一篇讲清楚",
|
||
* "status": "drafted",
|
||
* "dimzou_document_id": null
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example studio_article */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example … */
|
||
series_id?: string;
|
||
/** @example 1 */
|
||
article_number?: number;
|
||
/** @example 空调多久洗一次?一篇讲清楚 */
|
||
title?: string;
|
||
/** @example drafted */
|
||
status?: string;
|
||
/** @example null */
|
||
dimzou_document_id?: string;
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
/**
|
||
* [文章] 创建
|
||
* @description 在某系列下规划一篇文章。正文(大纲/草稿)由外部 Agent 通过 MCP 工具补全,
|
||
* 封面/内文图由 Agent 上传。需要 admin:studio:manage 权限。
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 所属系列 UUID。
|
||
* @example 9f1c2d3e-4b5a-6789-0abc-def012345678
|
||
* 作者、分类与子话题自动继承所属系列,不能由调用方覆盖。
|
||
*/
|
||
series_id: string;
|
||
/**
|
||
* @description 系列内序号,>=1。
|
||
* @example 1
|
||
*/
|
||
article_number: number;
|
||
/**
|
||
* @description 选题/写作计划。
|
||
* @example []
|
||
*/
|
||
plan?: Record<string, never>;
|
||
/**
|
||
* @description 文章大纲。
|
||
* @example []
|
||
*/
|
||
outline?: Record<string, never>;
|
||
/**
|
||
* @description 标题,最长 255。
|
||
* @example 空调多久洗一次?一篇讲清楚
|
||
*/
|
||
title?: string;
|
||
/**
|
||
* @description 摘要。
|
||
* @example 从健康与能耗角度给出清洗周期建议
|
||
*/
|
||
summary?: string;
|
||
/**
|
||
* @description 核心要点列表。
|
||
* @example [
|
||
* "建议每年清洗 1-2 次",
|
||
* "自检 3 个信号"
|
||
* ]
|
||
*/
|
||
key_takeaways?: string[];
|
||
/**
|
||
* @description 行动号召文案。
|
||
* @example 收藏本文,换季前照着做
|
||
*/
|
||
cta?: string;
|
||
/**
|
||
* @description 标签。
|
||
* @example [
|
||
* "空调",
|
||
* "清洗",
|
||
* "家电保养"
|
||
* ]
|
||
*/
|
||
tags?: string[];
|
||
/**
|
||
* @description SEO 关键词。
|
||
* @example [
|
||
* "空调清洗周期",
|
||
* "空调多久洗一次"
|
||
* ]
|
||
*/
|
||
seo_keywords?: string[];
|
||
/**
|
||
* @description 封面图生成提示词。
|
||
* @example 明亮客厅中清洗空调的写实场景
|
||
*/
|
||
cover_image_prompt?: string;
|
||
/**
|
||
* @description 内文配图提示词列表。
|
||
* @example [
|
||
* "architecto"
|
||
* ]
|
||
*/
|
||
inline_image_prompts?: string[];
|
||
/**
|
||
* @description 状态:planned, drafting, drafted, published, scheduled。默认 planned。
|
||
* @example planned
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 生成所用模型的元信息。
|
||
* @example []
|
||
*/
|
||
drafting_model?: Record<string, never>;
|
||
/**
|
||
* @description 发布排期配置。
|
||
* @example []
|
||
*/
|
||
publish_schedule?: Record<string, never>;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_article */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example … */
|
||
series_id?: string;
|
||
/** @example 1 */
|
||
article_number?: number;
|
||
/** @example 空调多久洗一次?一篇讲清楚 */
|
||
title?: string;
|
||
/** @example planned */
|
||
status?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "The series id field is required."
|
||
* ]
|
||
*/
|
||
series_id?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/articles/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the article.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* 获取详情
|
||
* @description 按 UUID 获取单个 Studio 实体,返回其全部属性(含 kind 判别字段)。
|
||
* 需要 admin:studio:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the article.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_subtopic */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example active */
|
||
status?: string;
|
||
/** @example 2026-07-18T09:00:00.000000Z */
|
||
created_at?: string;
|
||
/** @example 2026-07-18T09:00:00.000000Z */
|
||
updated_at?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/style-presets": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [样式预设] 列表
|
||
* @description 分页返回样式预设(文章 / 图片 / 组合),可按 type 过滤。需要 admin:studio:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 按类型过滤:article, image, bundle。
|
||
* @example article
|
||
*/
|
||
type?: string;
|
||
/**
|
||
* @description 每页数量,1-100,默认 20。
|
||
* @example 20
|
||
*/
|
||
page_size?: number;
|
||
/**
|
||
* @description 页码,默认 1。
|
||
* @example 1
|
||
*/
|
||
page?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "studio_style_preset",
|
||
* "id": "9f1c2d3e-4b5a-6789-0abc-def012345678",
|
||
* "type": "article",
|
||
* "name": "口语化科普风",
|
||
* "payload": {
|
||
* "tone": "亲切",
|
||
* "length": "1200-1800字"
|
||
* }
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example studio_style_preset */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example article */
|
||
type?: string;
|
||
/** @example 口语化科普风 */
|
||
name?: string;
|
||
payload?: {
|
||
/** @example 亲切 */
|
||
tone?: string;
|
||
/** @example 1200-1800字 */
|
||
length?: string;
|
||
};
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
/**
|
||
* [样式预设] 创建
|
||
* @description 新建一个可复用的写作/绘图样式预设,供机器人作者与文章生成引用。
|
||
* 需要 admin:studio:manage 权限。
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 预设类型:article, image, bundle。
|
||
* @example article
|
||
*/
|
||
type: string;
|
||
/**
|
||
* @description 预设名称,最长 255。
|
||
* @example 口语化科普风
|
||
*/
|
||
name: string;
|
||
/**
|
||
* @description 预设内容(结构随 type 而定)。
|
||
* @example {
|
||
* "tone": "亲切",
|
||
* "length": "1200-1800字"
|
||
* }
|
||
*/
|
||
payload?: Record<string, never>;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_style_preset */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example article */
|
||
type?: string;
|
||
/** @example 口语化科普风 */
|
||
name?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "The selected type is invalid."
|
||
* ]
|
||
*/
|
||
type?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/style-presets/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the style preset.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* 获取详情
|
||
* @description 按 UUID 获取单个 Studio 实体,返回其全部属性(含 kind 判别字段)。
|
||
* 需要 admin:studio:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the style preset.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_subtopic */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example active */
|
||
status?: string;
|
||
/** @example 2026-07-18T09:00:00.000000Z */
|
||
created_at?: string;
|
||
/** @example 2026-07-18T09:00:00.000000Z */
|
||
updated_at?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/category-briefs/{category_brief_id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category brief.
|
||
* @example architecto
|
||
*/
|
||
category_brief_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
/**
|
||
* [内容分类简报] 更新
|
||
* @description 部分更新,所有字段均可选。需要 admin:studio:manage 权限。
|
||
*/
|
||
put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category brief.
|
||
* @example architecto
|
||
*/
|
||
category_brief_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 分类内容定位描述。
|
||
* @example 家电清洗、保养与维修
|
||
*/
|
||
description?: string;
|
||
/**
|
||
* @description 目标读者。
|
||
* @example architecto
|
||
*/
|
||
target_audience?: string;
|
||
/**
|
||
* @description 内容切入角度列表。
|
||
* @example [
|
||
* "architecto"
|
||
* ]
|
||
*/
|
||
content_angles?: string[];
|
||
/**
|
||
* @description 内容风险/合规备注。
|
||
* @example architecto
|
||
*/
|
||
risk_notes?: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_category_brief */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example 家电清洗、保养与维修 */
|
||
description?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post?: never;
|
||
/**
|
||
* 删除
|
||
* @description 按 UUID 删除单个 Studio 实体。需要 admin:studio:manage 权限。
|
||
*/
|
||
delete: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category brief.
|
||
* @example architecto
|
||
*/
|
||
category_brief_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/** @example null */
|
||
data?: string;
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/subtopics/{subtopic_id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the subtopic.
|
||
* @example architecto
|
||
*/
|
||
subtopic_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
/**
|
||
* [子话题] 更新
|
||
* @description 部分更新,所有字段均可选。需要 admin:studio:manage 权限。
|
||
*/
|
||
put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the subtopic.
|
||
* @example architecto
|
||
*/
|
||
subtopic_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 子话题标题,最长 255。
|
||
* @example 空调清洗保养指南(2026 版)
|
||
*/
|
||
title?: string;
|
||
/**
|
||
* @description 目标读者。
|
||
* @example architecto
|
||
*/
|
||
target_audience?: string;
|
||
/**
|
||
* @description 读者痛点。
|
||
* @example architecto
|
||
*/
|
||
pain_points?: string;
|
||
/**
|
||
* @description 内容价值主张。
|
||
* @example architecto
|
||
*/
|
||
content_value?: string;
|
||
/**
|
||
* @description 可扩展性评分,0-10。
|
||
* @example 9
|
||
*/
|
||
expandability_score?: number;
|
||
/**
|
||
* @description 状态:active, archived。
|
||
* @example archived
|
||
*/
|
||
status?: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_subtopic */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example archived */
|
||
status?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "The selected status is invalid."
|
||
* ]
|
||
*/
|
||
status?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post?: never;
|
||
/**
|
||
* 删除
|
||
* @description 按 UUID 删除单个 Studio 实体。需要 admin:studio:manage 权限。
|
||
*/
|
||
delete: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the subtopic.
|
||
* @example architecto
|
||
*/
|
||
subtopic_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/** @example null */
|
||
data?: string;
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/robot-authors/{robot_author_id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the robot author.
|
||
* @example architecto
|
||
*/
|
||
robot_author_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
/**
|
||
* [机器人作者] 更新
|
||
* @description 部分更新,所有字段均可选。人设字段(persona / article_style / image_style /
|
||
* publishing_rules)会同步到账号级 profile。需要 admin:studio:manage 权限。
|
||
*/
|
||
put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the robot author.
|
||
* @example architecto
|
||
*/
|
||
robot_author_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 关联子话题 UUID。
|
||
* @example 2b3c4d5e-6f70-8912-3abc-def012345678
|
||
*/
|
||
subtopic_id?: string;
|
||
/**
|
||
* @description 账号人设描述(写入 profile)。
|
||
* @example 务实、耐心的家电保养老师傅
|
||
*/
|
||
persona?: string;
|
||
/**
|
||
* @description 文章风格配置(写入 profile)。
|
||
* @example []
|
||
*/
|
||
article_style?: Record<string, never>;
|
||
/**
|
||
* @description 配图风格配置(写入 profile)。
|
||
* @example []
|
||
*/
|
||
image_style?: Record<string, never>;
|
||
/**
|
||
* @description 发布规则(写入 profile)。
|
||
* @example []
|
||
*/
|
||
publishing_rules?: Record<string, never>;
|
||
/**
|
||
* @description 状态:pending, profiling, ready, paused。
|
||
* @example paused
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 来源:user, category。
|
||
* @example category
|
||
*/
|
||
source?: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_robot_author */
|
||
kind?: string;
|
||
/** @example 3c4d5e6f-7081-9234-5abc-def012345678 */
|
||
id?: string;
|
||
/** @example paused */
|
||
status?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post?: never;
|
||
/**
|
||
* 删除
|
||
* @description 按 UUID 删除单个 Studio 实体。需要 admin:studio:manage 权限。
|
||
*/
|
||
delete: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the robot author.
|
||
* @example architecto
|
||
*/
|
||
robot_author_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/** @example null */
|
||
data?: string;
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/series/{series_id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the series.
|
||
* @example architecto
|
||
*/
|
||
series_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
/**
|
||
* [文章系列] 更新
|
||
* @description 部分更新,所有字段均可选。需要 admin:studio:manage 权限。
|
||
*/
|
||
put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the series.
|
||
* @example architecto
|
||
*/
|
||
series_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 系列目标。
|
||
* @example 系统讲透家用空调清洗保养与选购
|
||
*/
|
||
goal?: string;
|
||
/**
|
||
* @description 系列定位。
|
||
* @example architecto
|
||
*/
|
||
positioning?: string;
|
||
/**
|
||
* @description 目标读者。
|
||
* @example architecto
|
||
*/
|
||
target_readers?: string;
|
||
/**
|
||
* @description 读者阅读旅程。
|
||
* @example architecto
|
||
*/
|
||
reader_journey?: string;
|
||
/**
|
||
* @description 计划文章数,>=0。
|
||
* @example 10
|
||
*/
|
||
target_article_count?: number;
|
||
/**
|
||
* @description 计划中的文章大纲列表。
|
||
* @example [
|
||
* []
|
||
* ]
|
||
*/
|
||
planned_articles?: Record<string, never>[];
|
||
/**
|
||
* @description 状态:planned, in_progress, complete。
|
||
* @example complete
|
||
*/
|
||
status?: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_series */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example complete */
|
||
status?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post?: never;
|
||
/**
|
||
* 删除
|
||
* @description 按 UUID 删除单个 Studio 实体。需要 admin:studio:manage 权限。
|
||
*/
|
||
delete: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the series.
|
||
* @example architecto
|
||
*/
|
||
series_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/** @example null */
|
||
data?: string;
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/articles/{article_id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the article.
|
||
* @example architecto
|
||
*/
|
||
article_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
/**
|
||
* [文章] 更新
|
||
* @description 部分更新,所有字段均可选。发布态字段(dimzou_document_id 等)由发布流程写入,不可直接更新。
|
||
* 需要 admin:studio:manage 权限。
|
||
*/
|
||
put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the article.
|
||
* @example architecto
|
||
*/
|
||
article_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 标题,最长 255。
|
||
* @example 空调多久洗一次?看完这篇就懂
|
||
*/
|
||
title?: string;
|
||
/**
|
||
* @description 摘要。
|
||
* @example architecto
|
||
*/
|
||
summary?: string;
|
||
/**
|
||
* @description 文章大纲。
|
||
* @example []
|
||
*/
|
||
outline?: Record<string, never>;
|
||
/**
|
||
* @description 核心要点列表。
|
||
* @example [
|
||
* "architecto"
|
||
* ]
|
||
*/
|
||
key_takeaways?: string[];
|
||
/**
|
||
* @description 标签。
|
||
* @example [
|
||
* "architecto"
|
||
* ]
|
||
*/
|
||
tags?: string[];
|
||
/**
|
||
* @description SEO 关键词。
|
||
* @example [
|
||
* "architecto"
|
||
* ]
|
||
*/
|
||
seo_keywords?: string[];
|
||
/**
|
||
* @description 状态:planned, drafting, drafted, published, scheduled。
|
||
* @example drafted
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 发布排期配置。
|
||
* @example []
|
||
*/
|
||
publish_schedule?: Record<string, never>;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_article */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example drafted */
|
||
status?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "The selected status is invalid."
|
||
* ]
|
||
*/
|
||
status?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post?: never;
|
||
/**
|
||
* 删除
|
||
* @description 按 UUID 删除单个 Studio 实体。需要 admin:studio:manage 权限。
|
||
*/
|
||
delete: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the article.
|
||
* @example architecto
|
||
*/
|
||
article_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/** @example null */
|
||
data?: string;
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/style-presets/{style_preset_id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the style preset.
|
||
* @example architecto
|
||
*/
|
||
style_preset_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
/**
|
||
* [样式预设] 更新
|
||
* @description 部分更新,所有字段均可选。需要 admin:studio:manage 权限。
|
||
*/
|
||
put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the style preset.
|
||
* @example architecto
|
||
*/
|
||
style_preset_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 预设类型:article, image, bundle。
|
||
* @example article
|
||
*/
|
||
type?: string;
|
||
/**
|
||
* @description 预设名称,最长 255。
|
||
* @example 口语化科普风(精简版)
|
||
*/
|
||
name?: string;
|
||
/**
|
||
* @description 预设内容(结构随 type 而定)。
|
||
* @example []
|
||
*/
|
||
payload?: Record<string, never>;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_style_preset */
|
||
kind?: string;
|
||
/** @example 9f1c2d3e-4b5a-6789-0abc-def012345678 */
|
||
id?: string;
|
||
/** @example 口语化科普风(精简版) */
|
||
name?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post?: never;
|
||
/**
|
||
* 删除
|
||
* @description 按 UUID 删除单个 Studio 实体。需要 admin:studio:manage 权限。
|
||
*/
|
||
delete: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the style preset.
|
||
* @example architecto
|
||
*/
|
||
style_preset_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/** @example null */
|
||
data?: string;
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/agent/tokens": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** 查看当前有效的 Agent token 列表 */
|
||
get: operations["AgentToken"];
|
||
put?: never;
|
||
/**
|
||
* 签发新的 Agent token
|
||
* @description 返回的 access_token 仅此一次完整展示;配置到 Agent 的 MCP client
|
||
* 后即可访问 POST /mcp/studio。
|
||
*/
|
||
post: operations["AgentToken"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/studio/agent/tokens/{tokenId}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
tokenId: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
post?: never;
|
||
/** 吊销一个 Agent token */
|
||
delete: operations["AgentToken"];
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/exc/demands": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** [需求监控] 需求列表 */
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 可选。按状态过滤: draft, open, quotation_closed, order_placed, fulfilled, broadcasting, matched, converted, expired, canceled。 示例: open
|
||
* @example architecto
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 可选。按派单模式过滤: instant_accept, quote, scheduled_booking, manual_selection。 示例: instant_accept
|
||
* @example architecto
|
||
*/
|
||
dispatch_mode?: string;
|
||
/**
|
||
* @description 可选。按买家过滤。 示例: 01HXXXX
|
||
* @example architecto
|
||
*/
|
||
user_uid?: string;
|
||
/**
|
||
* @description 可选。按标题模糊搜索。 示例: 空调
|
||
* @example architecto
|
||
*/
|
||
q?: string;
|
||
/**
|
||
* @description 可选。页码。 示例: 1
|
||
* @example 16
|
||
*/
|
||
page?: number;
|
||
/**
|
||
* @description 可选。每页数量,最大100。 示例: 20
|
||
* @example 16
|
||
*/
|
||
page_size?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/** @example architecto */
|
||
status?: string | null;
|
||
/**
|
||
* @example scheduled_booking
|
||
* @enum {string|null}
|
||
*/
|
||
dispatch_mode?: "instant_accept" | "quote" | "scheduled_booking" | "manual_selection" | null;
|
||
/** @example null */
|
||
user_uid?: string | null;
|
||
/**
|
||
* @description Must not be greater than 100 characters.
|
||
* @example n
|
||
*/
|
||
q?: string | null;
|
||
/**
|
||
* @description Must be at least 1.
|
||
* @example 67
|
||
*/
|
||
page?: number | null;
|
||
/**
|
||
* @description Must be at least 1. Must not be greater than 100.
|
||
* @example 16
|
||
*/
|
||
page_size?: number | null;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "service_demand",
|
||
* "id": 1,
|
||
* "title": "清洗空调",
|
||
* "status": "broadcasting",
|
||
* "dispatch_mode": "instant_accept",
|
||
* "service_type": "onsite",
|
||
* "buyer": {
|
||
* "uid": "01HXXXX",
|
||
* "display_name": "Alice"
|
||
* },
|
||
* "category_id": "9f1c...",
|
||
* "currency_code": "CNY",
|
||
* "ref_amount": 15000,
|
||
* "matched_provider_uid": null,
|
||
* "matched_at": null,
|
||
* "quotes_count": 0,
|
||
* "dispatches_count": 6,
|
||
* "required_at": "2026-07-12T10:00:00Z",
|
||
* "published_at": "2026-07-11T09:00:00Z",
|
||
* "created_at": "2026-07-11T08:00:00Z"
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example service_demand */
|
||
kind?: string;
|
||
/** @example 1 */
|
||
id?: number;
|
||
/** @example 清洗空调 */
|
||
title?: string;
|
||
/** @example broadcasting */
|
||
status?: string;
|
||
/** @example instant_accept */
|
||
dispatch_mode?: string;
|
||
/** @example onsite */
|
||
service_type?: string;
|
||
buyer?: {
|
||
/** @example 01HXXXX */
|
||
uid?: string;
|
||
/** @example Alice */
|
||
display_name?: string;
|
||
};
|
||
/** @example 9f1c... */
|
||
category_id?: string;
|
||
/** @example CNY */
|
||
currency_code?: string;
|
||
/** @example 15000 */
|
||
ref_amount?: number;
|
||
/** @example null */
|
||
matched_provider_uid?: string;
|
||
/** @example null */
|
||
matched_at?: string;
|
||
/** @example 0 */
|
||
quotes_count?: number;
|
||
/** @example 6 */
|
||
dispatches_count?: number;
|
||
/** @example 2026-07-12T10:00:00Z */
|
||
required_at?: string;
|
||
/** @example 2026-07-11T09:00:00Z */
|
||
published_at?: string;
|
||
/** @example 2026-07-11T08:00:00Z */
|
||
created_at?: string;
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/exc/demands/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 需求 ID。
|
||
* @example 1
|
||
*/
|
||
id: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [需求监控] 需求详情
|
||
* @description 含关联服务、报价与派单明细。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 需求 ID。
|
||
* @example 1
|
||
*/
|
||
id: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example service_demand */
|
||
kind?: string;
|
||
/** @example 1 */
|
||
id?: number;
|
||
/** @example 清洗空调 */
|
||
title?: string;
|
||
/** @example matched */
|
||
status?: string;
|
||
/** @example 两台挂机深度清洗 */
|
||
summary?: string;
|
||
address?: {
|
||
/** @example 广州 */
|
||
city?: string;
|
||
};
|
||
/** @example 23.1291 */
|
||
lat?: number;
|
||
/** @example 113.2644 */
|
||
lng?: number;
|
||
/** @example 90 */
|
||
duration?: number;
|
||
/** @example null */
|
||
quote_deadline?: string;
|
||
/** @example [] */
|
||
related_services?: unknown[];
|
||
/** @example [] */
|
||
quotes?: unknown[];
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "id": 3,
|
||
* "provider": {
|
||
* "uid": "01HYYYY",
|
||
* "display_name": "Bob"
|
||
* },
|
||
* "round_no": 1,
|
||
* "status": "accepted",
|
||
* "score": 0.87,
|
||
* "responded_at": "2026-07-11T09:01:00Z"
|
||
* }
|
||
* ]
|
||
*/
|
||
dispatches?: {
|
||
/** @example 3 */
|
||
id?: number;
|
||
provider?: {
|
||
/** @example 01HYYYY */
|
||
uid?: string;
|
||
/** @example Bob */
|
||
display_name?: string;
|
||
};
|
||
/** @example 1 */
|
||
round_no?: number;
|
||
/** @example accepted */
|
||
status?: string;
|
||
/** @example 0.87 */
|
||
score?: number;
|
||
/** @example 2026-07-11T09:01:00Z */
|
||
responded_at?: string;
|
||
}[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/exc/dispatches": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** [派单监控] 派单列表 */
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 可选。按状态过滤: sent, delivered, viewed, accepted, rejected, ignored, expired, taken_by_other。 示例: accepted
|
||
* @example architecto
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 可选。按需求过滤。 示例: 1
|
||
* @example 16
|
||
*/
|
||
demand_id?: number;
|
||
/**
|
||
* @description 可选。按服务商过滤。 示例: 01HYYYY
|
||
* @example architecto
|
||
*/
|
||
provider_uid?: string;
|
||
/**
|
||
* @description 可选。按轮次过滤。 示例: 1
|
||
* @example 16
|
||
*/
|
||
round_no?: number;
|
||
/**
|
||
* @description 可选。页码。 示例: 1
|
||
* @example 16
|
||
*/
|
||
page?: number;
|
||
/**
|
||
* @description 可选。每页数量,最大100。 示例: 20
|
||
* @example 16
|
||
*/
|
||
page_size?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @example sent
|
||
* @enum {string|null}
|
||
*/
|
||
status?: "sent" | "delivered" | "viewed" | "accepted" | "rejected" | "ignored" | "expired" | "taken_by_other" | null;
|
||
/** @example 16 */
|
||
demand_id?: number | null;
|
||
/** @example null */
|
||
provider_uid?: string | null;
|
||
/**
|
||
* @description Must be at least 0.
|
||
* @example 39
|
||
*/
|
||
round_no?: number | null;
|
||
/**
|
||
* @description Must be at least 1.
|
||
* @example 67
|
||
*/
|
||
page?: number | null;
|
||
/**
|
||
* @description Must be at least 1. Must not be greater than 100.
|
||
* @example 16
|
||
*/
|
||
page_size?: number | null;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "demand_dispatch",
|
||
* "id": 3,
|
||
* "demand": {
|
||
* "id": 1,
|
||
* "title": "清洗空调"
|
||
* },
|
||
* "provider": {
|
||
* "uid": "01HYYYY",
|
||
* "display_name": "Bob"
|
||
* },
|
||
* "round_no": 1,
|
||
* "status": "accepted",
|
||
* "score": 0.87,
|
||
* "similarity": 0.91,
|
||
* "distance_meters": 1200.5,
|
||
* "eta_minutes": 15,
|
||
* "auto_grab_eligible": true,
|
||
* "sent_at": "2026-07-11T09:00:00Z",
|
||
* "viewed_at": null,
|
||
* "responded_at": "2026-07-11T09:01:00Z",
|
||
* "expires_at": "2026-07-11T09:05:00Z"
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example demand_dispatch */
|
||
kind?: string;
|
||
/** @example 3 */
|
||
id?: number;
|
||
demand?: {
|
||
/** @example 1 */
|
||
id?: number;
|
||
/** @example 清洗空调 */
|
||
title?: string;
|
||
};
|
||
provider?: {
|
||
/** @example 01HYYYY */
|
||
uid?: string;
|
||
/** @example Bob */
|
||
display_name?: string;
|
||
};
|
||
/** @example 1 */
|
||
round_no?: number;
|
||
/** @example accepted */
|
||
status?: string;
|
||
/** @example 0.87 */
|
||
score?: number;
|
||
/** @example 0.91 */
|
||
similarity?: number;
|
||
/** @example 1200.5 */
|
||
distance_meters?: number;
|
||
/** @example 15 */
|
||
eta_minutes?: number;
|
||
/** @example true */
|
||
auto_grab_eligible?: boolean;
|
||
/** @example 2026-07-11T09:00:00Z */
|
||
sent_at?: string;
|
||
/** @example null */
|
||
viewed_at?: string;
|
||
/** @example 2026-07-11T09:01:00Z */
|
||
responded_at?: string;
|
||
/** @example 2026-07-11T09:05:00Z */
|
||
expires_at?: string;
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/exc/orders": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** [订单监控] 订单列表 */
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 可选。按订单状态过滤: created, confirmed, started, consumed, paid, fulfilled, canceled。 示例: paid
|
||
* @example architecto
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 可选。按支付状态过滤: UNPAID, PAID。 示例: PAID
|
||
* @example architecto
|
||
*/
|
||
payment_status?: string;
|
||
/**
|
||
* @description 可选。按买家过滤。 示例: 01HXXXX
|
||
* @example architecto
|
||
*/
|
||
buyer_uid?: string;
|
||
/**
|
||
* @description 可选。按服务商过滤。 示例: 01HYYYY
|
||
* @example architecto
|
||
*/
|
||
provider_uid?: string;
|
||
/**
|
||
* @description 可选。页码。 示例: 1
|
||
* @example 16
|
||
*/
|
||
page?: number;
|
||
/**
|
||
* @description 可选。每页数量,最大100。 示例: 20
|
||
* @example 16
|
||
*/
|
||
page_size?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @example paid
|
||
* @enum {string|null}
|
||
*/
|
||
status?: "created" | "confirmed" | "started" | "consumed" | "paid" | "fulfilled" | "canceled" | null;
|
||
/**
|
||
* @example UNPAID
|
||
* @enum {string|null}
|
||
*/
|
||
payment_status?: "UNPAID" | "PAID" | null;
|
||
/** @example null */
|
||
buyer_uid?: string | null;
|
||
/** @example null */
|
||
provider_uid?: string | null;
|
||
/**
|
||
* @description Must be at least 1.
|
||
* @example 16
|
||
*/
|
||
page?: number | null;
|
||
/**
|
||
* @description Must be at least 1. Must not be greater than 100.
|
||
* @example 22
|
||
*/
|
||
page_size?: number | null;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "service_order",
|
||
* "id": 1,
|
||
* "title": "清洗空调",
|
||
* "status": "paid",
|
||
* "payment_status": "PAID",
|
||
* "buyer": {
|
||
* "uid": "01HXXXX",
|
||
* "display_name": "Alice"
|
||
* },
|
||
* "provider": {
|
||
* "uid": "01HYYYY",
|
||
* "display_name": "Bob"
|
||
* },
|
||
* "currency_code": "CNY",
|
||
* "total_amount": 15000,
|
||
* "actual_total_amount": 15000,
|
||
* "platform_fee_amount": 1500,
|
||
* "provider_net_amount": 13500,
|
||
* "commission_rate": 0.1,
|
||
* "cancellation_fee_amount": null,
|
||
* "paid_at": "2026-07-11T12:00:00Z",
|
||
* "settled_at": null,
|
||
* "escrow_release_at": "2026-07-14T12:00:00Z",
|
||
* "escrow_released_at": null,
|
||
* "order_date": "2026-07-11T10:00:00Z",
|
||
* "created_at": "2026-07-11T10:00:00Z"
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example service_order */
|
||
kind?: string;
|
||
/** @example 1 */
|
||
id?: number;
|
||
/** @example 清洗空调 */
|
||
title?: string;
|
||
/** @example paid */
|
||
status?: string;
|
||
/** @example PAID */
|
||
payment_status?: string;
|
||
buyer?: {
|
||
/** @example 01HXXXX */
|
||
uid?: string;
|
||
/** @example Alice */
|
||
display_name?: string;
|
||
};
|
||
provider?: {
|
||
/** @example 01HYYYY */
|
||
uid?: string;
|
||
/** @example Bob */
|
||
display_name?: string;
|
||
};
|
||
/** @example CNY */
|
||
currency_code?: string;
|
||
/** @example 15000 */
|
||
total_amount?: number;
|
||
/** @example 15000 */
|
||
actual_total_amount?: number;
|
||
/** @example 1500 */
|
||
platform_fee_amount?: number;
|
||
/** @example 13500 */
|
||
provider_net_amount?: number;
|
||
/** @example 0.1 */
|
||
commission_rate?: number;
|
||
/** @example null */
|
||
cancellation_fee_amount?: string;
|
||
/** @example 2026-07-11T12:00:00Z */
|
||
paid_at?: string;
|
||
/** @example null */
|
||
settled_at?: string;
|
||
/** @example 2026-07-14T12:00:00Z */
|
||
escrow_release_at?: string;
|
||
/** @example null */
|
||
escrow_released_at?: string;
|
||
/** @example 2026-07-11T10:00:00Z */
|
||
order_date?: string;
|
||
/** @example 2026-07-11T10:00:00Z */
|
||
created_at?: string;
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/exc/orders/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 订单 ID。
|
||
* @example 1
|
||
*/
|
||
id: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [订单监控] 订单详情
|
||
* @description 含订单项与状态流转审计记录。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 订单 ID。
|
||
* @example 1
|
||
*/
|
||
id: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example service_order */
|
||
kind?: string;
|
||
/** @example 1 */
|
||
id?: number;
|
||
/** @example paid */
|
||
status?: string;
|
||
/** @example PAY202607110001 */
|
||
pay_order_no?: string;
|
||
/** @example STRIPE */
|
||
paid_channel?: string;
|
||
/** @example null */
|
||
cancellation_fee_due_date?: string;
|
||
/** @example [] */
|
||
items?: unknown[];
|
||
/** @example [] */
|
||
transactions?: unknown[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/exc/providers": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** [服务商监控] 服务商列表 */
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 可选。按在线状态过滤: offline, online, inactive, busy。 示例: online
|
||
* @example architecto
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 可选。按是否禁用过滤。 示例: false
|
||
* @example false
|
||
*/
|
||
is_disabled?: boolean;
|
||
/**
|
||
* @description 可选。按是否认证过滤。 示例: true
|
||
* @example false
|
||
*/
|
||
is_verified?: boolean;
|
||
/**
|
||
* @description 可选。页码。 示例: 1
|
||
* @example 16
|
||
*/
|
||
page?: number;
|
||
/**
|
||
* @description 可选。每页数量,最大100。 示例: 20
|
||
* @example 16
|
||
*/
|
||
page_size?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @example offline
|
||
* @enum {string|null}
|
||
*/
|
||
status?: "offline" | "online" | "inactive" | "busy" | null;
|
||
/** @example false */
|
||
is_disabled?: boolean | null;
|
||
/** @example true */
|
||
is_verified?: boolean | null;
|
||
/**
|
||
* @description Must be at least 1.
|
||
* @example 16
|
||
*/
|
||
page?: number | null;
|
||
/**
|
||
* @description Must be at least 1. Must not be greater than 100.
|
||
* @example 22
|
||
*/
|
||
page_size?: number | null;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "provider_profile",
|
||
* "user": {
|
||
* "uid": "01HYYYY",
|
||
* "display_name": "Bob"
|
||
* },
|
||
* "status": "online",
|
||
* "is_disabled": false,
|
||
* "is_verified": true,
|
||
* "rating": 4.8,
|
||
* "completed_jobs": 32,
|
||
* "online_at": "2026-07-11T08:00:00Z",
|
||
* "offline_at": null,
|
||
* "last_location_at": "2026-07-11T09:30:00Z",
|
||
* "current_service_order_id": null,
|
||
* "created_at": "2026-06-01T08:00:00Z"
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example provider_profile */
|
||
kind?: string;
|
||
user?: {
|
||
/** @example 01HYYYY */
|
||
uid?: string;
|
||
/** @example Bob */
|
||
display_name?: string;
|
||
};
|
||
/** @example online */
|
||
status?: string;
|
||
/** @example false */
|
||
is_disabled?: boolean;
|
||
/** @example true */
|
||
is_verified?: boolean;
|
||
/** @example 4.8 */
|
||
rating?: number;
|
||
/** @example 32 */
|
||
completed_jobs?: number;
|
||
/** @example 2026-07-11T08:00:00Z */
|
||
online_at?: string;
|
||
/** @example null */
|
||
offline_at?: string;
|
||
/** @example 2026-07-11T09:30:00Z */
|
||
last_location_at?: string;
|
||
/** @example null */
|
||
current_service_order_id?: string;
|
||
/** @example 2026-06-01T08:00:00Z */
|
||
created_at?: string;
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/exc/providers/{uid}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 服务商用户 UID。
|
||
* @example 01HYYYY
|
||
*/
|
||
uid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [服务商监控] 服务商详情
|
||
* @description 含派单设置与最近状态日志。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 服务商用户 UID。
|
||
* @example 01HYYYY
|
||
*/
|
||
uid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example provider_profile */
|
||
kind?: string;
|
||
user?: {
|
||
/** @example 01HYYYY */
|
||
uid?: string;
|
||
/** @example Bob */
|
||
display_name?: string;
|
||
};
|
||
/** @example online */
|
||
status?: string;
|
||
/** @example 23.1291 */
|
||
last_lat?: number;
|
||
/** @example 113.2644 */
|
||
last_lng?: number;
|
||
/** @example 12.5 */
|
||
location_accuracy_m?: number;
|
||
dispatch_setting?: {
|
||
/** @example true */
|
||
auto_grab_enabled?: boolean;
|
||
};
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "from_status": "offline",
|
||
* "to_status": "online",
|
||
* "reason": null,
|
||
* "created_at": "2026-07-11T08:00:00Z"
|
||
* }
|
||
* ]
|
||
*/
|
||
status_logs?: {
|
||
/** @example offline */
|
||
from_status?: string;
|
||
/** @example online */
|
||
to_status?: string;
|
||
/** @example null */
|
||
reason?: string;
|
||
/** @example 2026-07-11T08:00:00Z */
|
||
created_at?: string;
|
||
}[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/file-x/events": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [事件监控] 事件列表
|
||
* @description 只读列出全站事件动态,包含被屏蔽(is_blocked)的记录,支持按可见性、作者、屏蔽状态、话题及标题模糊搜索过滤。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 可选。按可见性过滤: public, friends, private。 示例: public
|
||
* @example architecto
|
||
*/
|
||
visibility?: string;
|
||
/**
|
||
* @description 可选。按屏蔽状态过滤: blocked(已屏蔽), visible(未屏蔽), all(默认)。 示例: blocked
|
||
* @example architecto
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 可选。按作者过滤。 示例: 01HXXXX
|
||
* @example architecto
|
||
*/
|
||
user_uid?: string;
|
||
/**
|
||
* @description 可选。按主话题过滤。 示例: 家政保洁
|
||
* @example architecto
|
||
*/
|
||
primary_topic?: string;
|
||
/**
|
||
* @description 可选。按标题模糊搜索。 示例: 空调
|
||
* @example architecto
|
||
*/
|
||
q?: string;
|
||
/**
|
||
* @description 可选。页码。 示例: 1
|
||
* @example 16
|
||
*/
|
||
page?: number;
|
||
/**
|
||
* @description 可选。每页数量,最大100。 示例: 20
|
||
* @example 16
|
||
*/
|
||
page_size?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @example friends
|
||
* @enum {string|null}
|
||
*/
|
||
visibility?: "public" | "friends" | "private" | null;
|
||
/**
|
||
* @example blocked
|
||
* @enum {string|null}
|
||
*/
|
||
status?: "blocked" | "visible" | "all" | null;
|
||
/** @example null */
|
||
user_uid?: string | null;
|
||
/**
|
||
* @description Must not be greater than 100 characters.
|
||
* @example b
|
||
*/
|
||
primary_topic?: string | null;
|
||
/**
|
||
* @description Must not be greater than 100 characters.
|
||
* @example n
|
||
*/
|
||
q?: string | null;
|
||
/**
|
||
* @description Must be at least 1.
|
||
* @example 67
|
||
*/
|
||
page?: number | null;
|
||
/**
|
||
* @description Must be at least 1. Must not be greater than 100.
|
||
* @example 16
|
||
*/
|
||
page_size?: number | null;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "filex_event",
|
||
* "id": 25,
|
||
* "title": "空调清洗上门服务记录",
|
||
* "visibility": "public",
|
||
* "primary_topic": "家政保洁",
|
||
* "is_blocked": false,
|
||
* "blocked_at": null,
|
||
* "blocked_by_uid": null,
|
||
* "author": {
|
||
* "uid": "01HXXXX",
|
||
* "display_name": "Alice"
|
||
* },
|
||
* "likes_count": 5,
|
||
* "comments_count": 3,
|
||
* "open_reports_count": 0,
|
||
* "event_day": "2026-07-10",
|
||
* "created_at": "2026-07-10T09:00:00Z",
|
||
* "deleted_at": null
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example filex_event */
|
||
kind?: string;
|
||
/** @example 25 */
|
||
id?: number;
|
||
/** @example 空调清洗上门服务记录 */
|
||
title?: string;
|
||
/** @example public */
|
||
visibility?: string;
|
||
/** @example 家政保洁 */
|
||
primary_topic?: string;
|
||
/** @example false */
|
||
is_blocked?: boolean;
|
||
/** @example null */
|
||
blocked_at?: string;
|
||
/** @example null */
|
||
blocked_by_uid?: string;
|
||
author?: {
|
||
/** @example 01HXXXX */
|
||
uid?: string;
|
||
/** @example Alice */
|
||
display_name?: string;
|
||
};
|
||
/** @example 5 */
|
||
likes_count?: number;
|
||
/** @example 3 */
|
||
comments_count?: number;
|
||
/** @example 0 */
|
||
open_reports_count?: number;
|
||
/** @example 2026-07-10 */
|
||
event_day?: string;
|
||
/** @example 2026-07-10T09:00:00Z */
|
||
created_at?: string;
|
||
/** @example null */
|
||
deleted_at?: string;
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/file-x/events/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 事件 ID。
|
||
* @example 25
|
||
*/
|
||
id: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [事件监控] 事件详情
|
||
* @description 含正文、附件、地理位置、话题提取信息及互动/举报统计。可查看被屏蔽或已软删除的事件。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 事件 ID。
|
||
* @example 25
|
||
*/
|
||
id: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example filex_event */
|
||
kind?: string;
|
||
/** @example 25 */
|
||
id?: number;
|
||
/** @example 空调清洗上门服务记录 */
|
||
title?: string;
|
||
/** @example public */
|
||
visibility?: string;
|
||
/** @example 家政保洁 */
|
||
primary_topic?: string;
|
||
/** @example false */
|
||
is_blocked?: boolean;
|
||
author?: {
|
||
/** @example 01HXXXX */
|
||
uid?: string;
|
||
/** @example Alice */
|
||
display_name?: string;
|
||
};
|
||
/** @example 两台挂机深度清洗 */
|
||
content?: string;
|
||
/**
|
||
* @example [
|
||
* "家政保洁"
|
||
* ]
|
||
*/
|
||
topics?: string[];
|
||
/** @example 广州 */
|
||
location_name?: string;
|
||
/** @example 23.13 */
|
||
latitude?: number;
|
||
/** @example 113.26 */
|
||
longitude?: number;
|
||
/** @example [] */
|
||
assets?: unknown[];
|
||
/** @example null */
|
||
deleted_at?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/file-x/reported-events": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [事件审核] 被举报事件列表
|
||
* @description 按被举报的事件分组列出举报,附带举报明细与屏蔽状态。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 可选。按状态过滤: pending(有待处理举报), blocked(已屏蔽), all(默认)。 示例: pending
|
||
* @example architecto
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 可选。页码。 示例: 1
|
||
* @example 16
|
||
*/
|
||
page?: number;
|
||
/**
|
||
* @description 可选。每页数量,最大100。 示例: 20
|
||
* @example 16
|
||
*/
|
||
page_size?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @example pending
|
||
* @enum {string|null}
|
||
*/
|
||
status?: "pending" | "blocked" | "all" | null;
|
||
/**
|
||
* @description Must be at least 1.
|
||
* @example 16
|
||
*/
|
||
page?: number | null;
|
||
/**
|
||
* @description Must be at least 1. Must not be greater than 100.
|
||
* @example 22
|
||
*/
|
||
page_size?: number | null;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "reported_event",
|
||
* "id": 25,
|
||
* "title": "空调清洗上门服务记录",
|
||
* "visibility": "public",
|
||
* "is_blocked": false,
|
||
* "blocked_at": null,
|
||
* "blocked_by_uid": null,
|
||
* "author": {
|
||
* "uid": "01HYYYY",
|
||
* "display_name": "Bob"
|
||
* },
|
||
* "open_reports_count": 2,
|
||
* "latest_report_at": "2026-07-11T10:10:00Z",
|
||
* "reports": [
|
||
* {
|
||
* "id": 1,
|
||
* "reason": "spam",
|
||
* "message": "疑似虚假事迹",
|
||
* "status": "open",
|
||
* "reporter": {
|
||
* "uid": "01HXXXX",
|
||
* "display_name": "Alice"
|
||
* },
|
||
* "created_at": "2026-07-11T10:10:00Z",
|
||
* "handled_at": null
|
||
* }
|
||
* ],
|
||
* "created_at": "2026-07-10T09:00:00Z"
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example reported_event */
|
||
kind?: string;
|
||
/** @example 25 */
|
||
id?: number;
|
||
/** @example 空调清洗上门服务记录 */
|
||
title?: string;
|
||
/** @example public */
|
||
visibility?: string;
|
||
/** @example false */
|
||
is_blocked?: boolean;
|
||
/** @example null */
|
||
blocked_at?: string;
|
||
/** @example null */
|
||
blocked_by_uid?: string;
|
||
author?: {
|
||
/** @example 01HYYYY */
|
||
uid?: string;
|
||
/** @example Bob */
|
||
display_name?: string;
|
||
};
|
||
/** @example 2 */
|
||
open_reports_count?: number;
|
||
/** @example 2026-07-11T10:10:00Z */
|
||
latest_report_at?: string;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "id": 1,
|
||
* "reason": "spam",
|
||
* "message": "疑似虚假事迹",
|
||
* "status": "open",
|
||
* "reporter": {
|
||
* "uid": "01HXXXX",
|
||
* "display_name": "Alice"
|
||
* },
|
||
* "created_at": "2026-07-11T10:10:00Z",
|
||
* "handled_at": null
|
||
* }
|
||
* ]
|
||
*/
|
||
reports?: {
|
||
/** @example 1 */
|
||
id?: number;
|
||
/** @example spam */
|
||
reason?: string;
|
||
/** @example 疑似虚假事迹 */
|
||
message?: string;
|
||
/** @example open */
|
||
status?: string;
|
||
reporter?: {
|
||
/** @example 01HXXXX */
|
||
uid?: string;
|
||
/** @example Alice */
|
||
display_name?: string;
|
||
};
|
||
/** @example 2026-07-11T10:10:00Z */
|
||
created_at?: string;
|
||
/** @example null */
|
||
handled_at?: string;
|
||
}[];
|
||
/** @example 2026-07-10T09:00:00Z */
|
||
created_at?: string;
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/file-x/reported-events/{event}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 事件 ID。
|
||
* @example 25
|
||
*/
|
||
event: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
/**
|
||
* [事件审核] 处理被举报事件
|
||
* @description approve: 举报成立,屏蔽事件并将其全部待处理举报标记已处理;
|
||
* reject: 举报不成立,驳回全部待处理举报;
|
||
* revert: 撤销屏蔽(仅对已屏蔽事件有效),举报记录保留。
|
||
*/
|
||
patch: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 事件 ID。
|
||
* @example 25
|
||
*/
|
||
event: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 处理动作: approve, reject, revert。
|
||
* @example approve
|
||
*/
|
||
action: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example reported_event */
|
||
kind?: string;
|
||
/** @example 25 */
|
||
id?: number;
|
||
/** @example true */
|
||
is_blocked?: boolean;
|
||
/** @example 2026-07-11T10:20:00Z */
|
||
blocked_at?: string;
|
||
/** @example 01HXXXX */
|
||
blocked_by_uid?: string;
|
||
/** @example 0 */
|
||
open_reports_count?: number;
|
||
};
|
||
/** @example 举报已处理 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "Event is not blocked."
|
||
* ]
|
||
*/
|
||
action?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/categories/tree": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get category tree (admin)
|
||
* @description Returns categories in tree structure with option to include inactive categories.
|
||
*/
|
||
get: operations["getCategoryTreeadmin"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/categories/pending": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* List pending user-created categories
|
||
* @description User-created categories awaiting review (approval_status = pending).
|
||
*/
|
||
get: operations["listPendingUserCreatedCategories"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/categories/{category_id}/approve": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category.
|
||
* @example 2912b591-09f0-4c14-9190-866abd51cbee
|
||
*/
|
||
category_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/** Approve a pending category (make it public) */
|
||
post: operations["approveAPendingCategorymakeItPublic"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/categories/{category_id}/reject": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category.
|
||
* @example 2912b591-09f0-4c14-9190-866abd51cbee
|
||
*/
|
||
category_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/** Reject a public request (keep the category private) */
|
||
post: operations["rejectAPublicRequestkeepTheCategoryPrivate"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/categories/{category_id}/merge": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category.
|
||
* @example 2912b591-09f0-4c14-9190-866abd51cbee
|
||
*/
|
||
category_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/** Merge a category into another (preserves both IDs) */
|
||
post: operations["mergeACategoryIntoAnotherpreservesBothIDs"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/categories": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Create category
|
||
* @description Create a new category. Translations can be added immediately or later via separate endpoints.
|
||
*/
|
||
post: operations["createCategory"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/categories/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description UUID of the category.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get category details
|
||
* @description Retrieve detailed information about a specific category.
|
||
*/
|
||
get: operations["getCategoryDetails"];
|
||
/**
|
||
* Update category
|
||
* @description Update an existing category with new data and translations.
|
||
*/
|
||
put: operations["updateCategory"];
|
||
post?: never;
|
||
/**
|
||
* Delete category
|
||
* @description Soft delete a category. Categories with children cannot be deleted.
|
||
*/
|
||
delete: operations["deleteCategory"];
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/categories/{category_id}/translations": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category.
|
||
* @example 2912b591-09f0-4c14-9190-866abd51cbee
|
||
*/
|
||
category_id: string;
|
||
/**
|
||
* @description UUID of the category.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* List all translations for category
|
||
* @description Get all translations associated with a specific category.
|
||
*/
|
||
get: operations["listAllTranslationsForCategory"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/categories/{category_id}/translations/{locale}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category.
|
||
* @example 2912b591-09f0-4c14-9190-866abd51cbee
|
||
*/
|
||
category_id: string;
|
||
/**
|
||
* @description Locale code (e.g., 'en', 'zh-hans').
|
||
* @example sr_BA
|
||
*/
|
||
locale: string;
|
||
/**
|
||
* @description UUID of the category.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get translation for specific locale
|
||
* @description Retrieve the translation for a specific category and locale.
|
||
*/
|
||
get: operations["getTranslationForSpecificLocale"];
|
||
put?: never;
|
||
/**
|
||
* Create or update translation for specific locale
|
||
* @description Add or update a translation for a specific category and locale.
|
||
*/
|
||
post: operations["createOrUpdateTranslationForSpecificLocale"];
|
||
/**
|
||
* Delete translation for specific locale
|
||
* @description Remove the translation for a specific category and locale.
|
||
*/
|
||
delete: operations["deleteTranslationForSpecificLocale"];
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/api-docs/public": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** 获取公共 API OpenAPI 文档 */
|
||
get: operations["APIOpenAPI"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/api-docs/admin": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** 获取管理端 API OpenAPI 文档 */
|
||
get: operations["APIOpenAPI"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/internal-surfaces/{surface}/session": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
surface: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* 获取内部工具访问链接
|
||
* @description 校验当前管理员是否拥有该工具的权限,并签发一次性入口链接。
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
surface: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: never;
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/notification/push-apps": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** 推送应用列表 */
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example Authentication required */
|
||
message?: string;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
/** 创建推送应用 */
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: never;
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/notification/push-apps/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the push app.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/** 推送应用详情 */
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the push app.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example Authentication required */
|
||
message?: string;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
/** 更新推送应用 */
|
||
put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the push app.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: never;
|
||
};
|
||
post?: never;
|
||
/** 删除推送应用 */
|
||
delete: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the push app.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: never;
|
||
};
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/notification/push-apps/{id}/verify": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the push app.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* 校验推送应用凭证
|
||
* @description 只报告凭证是否可用,不返回文件内容或解析结果。
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the push app.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: never;
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/locales": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** 获取语言列表 */
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "locale",
|
||
* "code": "en",
|
||
* "name": "English",
|
||
* "native_name": "English",
|
||
* "is_active": true,
|
||
* "sort_order": 1,
|
||
* "created_at": "2024-01-01T00:00:00Z",
|
||
* "updated_at": "2024-01-01T00:00:00Z"
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example locale */
|
||
kind?: string;
|
||
/** @example en */
|
||
code?: string;
|
||
/** @example English */
|
||
name?: string;
|
||
/** @example English */
|
||
native_name?: string;
|
||
/** @example true */
|
||
is_active?: boolean;
|
||
/** @example 1 */
|
||
sort_order?: number;
|
||
/** @example 2024-01-01T00:00:00Z */
|
||
created_at?: string;
|
||
/** @example 2024-01-01T00:00:00Z */
|
||
updated_at?: string;
|
||
}[];
|
||
};
|
||
};
|
||
};
|
||
/** @description unauthorized */
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHORIZED */
|
||
code?: string;
|
||
/** @example 未授权访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
/** 创建语言 */
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 语言代码(BCP-47)。
|
||
* @example fr
|
||
*/
|
||
code: string;
|
||
/**
|
||
* @description 语言名称。
|
||
* @example French
|
||
*/
|
||
name: string;
|
||
/**
|
||
* @description 语言本地名称。
|
||
* @example Français
|
||
*/
|
||
native_name: string;
|
||
/**
|
||
* @description 是否启用。
|
||
* @example true
|
||
*/
|
||
is_active?: boolean;
|
||
/**
|
||
* @description 排序值。
|
||
* @example 4
|
||
*/
|
||
sort_order?: number;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example locale */
|
||
kind?: string;
|
||
/** @example fr */
|
||
code?: string;
|
||
/** @example French */
|
||
name?: string;
|
||
/** @example Français */
|
||
native_name?: string;
|
||
/** @example true */
|
||
is_active?: boolean;
|
||
/** @example 4 */
|
||
sort_order?: number;
|
||
/** @example 2024-01-01T00:00:00Z */
|
||
created_at?: string;
|
||
/** @example 2024-01-01T00:00:00Z */
|
||
updated_at?: string;
|
||
};
|
||
/** @example 语言已创建。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/locales/{code}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 语言代码。
|
||
* @example en
|
||
*/
|
||
code: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/** 获取语言详情 */
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 语言代码。
|
||
* @example en
|
||
*/
|
||
code: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example locale */
|
||
kind?: string;
|
||
/** @example en */
|
||
code?: string;
|
||
/** @example English */
|
||
name?: string;
|
||
/** @example English */
|
||
native_name?: string;
|
||
/** @example true */
|
||
is_active?: boolean;
|
||
/** @example 1 */
|
||
sort_order?: number;
|
||
/** @example 2024-01-01T00:00:00Z */
|
||
created_at?: string;
|
||
/** @example 2024-01-01T00:00:00Z */
|
||
updated_at?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
/** 更新语言 */
|
||
put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 语言代码。
|
||
* @example en
|
||
*/
|
||
code: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 语言名称。
|
||
* @example French Updated
|
||
*/
|
||
name?: string;
|
||
/**
|
||
* @description 本地名称。
|
||
* @example Français
|
||
*/
|
||
native_name?: string;
|
||
/**
|
||
* @description 是否启用。
|
||
* @example true
|
||
*/
|
||
is_active?: boolean;
|
||
/**
|
||
* @description 排序值。
|
||
* @example 5
|
||
*/
|
||
sort_order?: number;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example locale */
|
||
kind?: string;
|
||
/** @example fr */
|
||
code?: string;
|
||
/** @example French Updated */
|
||
name?: string;
|
||
/** @example Français */
|
||
native_name?: string;
|
||
/** @example true */
|
||
is_active?: boolean;
|
||
/** @example 5 */
|
||
sort_order?: number;
|
||
/** @example 2024-01-01T00:00:00Z */
|
||
created_at?: string;
|
||
/** @example 2024-01-01T00:00:00Z */
|
||
updated_at?: string;
|
||
};
|
||
/** @example 语言已更新。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post?: never;
|
||
/** 删除语言 */
|
||
delete: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 语言代码。
|
||
* @example en
|
||
*/
|
||
code: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/** @example 语言已删除。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/users/{uid}/info": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
uid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [用户信息查看] 用户资料详情
|
||
* @description 返回用户账号信息、个人资料、工作经历、教育经历、荣誉与地址。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
uid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
user?: {
|
||
/** @example user */
|
||
kind?: string;
|
||
/** @example 01HQ8M4Z2A3B5C6D7E8F9G0H1I2J3K4L */
|
||
uid?: string;
|
||
/** @example [email protected] */
|
||
email?: string;
|
||
/** @example true */
|
||
status?: boolean;
|
||
};
|
||
profile?: {
|
||
/** @example user_profile */
|
||
kind?: string;
|
||
/** @example 01HQ8M4Z2A3B5C6D7E8F9G0H1I2J3K4L */
|
||
user_uid?: string;
|
||
/** @example 张三 */
|
||
computed_fullname?: string;
|
||
};
|
||
/** @example [] */
|
||
careers?: unknown[];
|
||
/** @example [] */
|
||
educations?: unknown[];
|
||
/** @example [] */
|
||
honors?: unknown[];
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "user_address",
|
||
* "contact_name": "张三",
|
||
* "contact_phone_number": "13800000000"
|
||
* }
|
||
* ]
|
||
*/
|
||
addresses?: {
|
||
/** @example user_address */
|
||
kind?: string;
|
||
/** @example 张三 */
|
||
contact_name?: string;
|
||
/** @example 13800000000 */
|
||
contact_phone_number?: string;
|
||
}[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 您无权访问此资源。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 用户不存在 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/users/{uid}/services": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
uid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [提供服务查看] 用户提供的服务
|
||
* @description 返回用户全部专长及服务变体,包含已上架与未上架服务。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
uid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "id": 1,
|
||
* "kind": "expertise",
|
||
* "name": "清洗空调",
|
||
* "description": "空调深度清洗",
|
||
* "tags": [
|
||
* "家电"
|
||
* ],
|
||
* "user_uid": "01HQ8M4Z2A3B5C6D7E8F9G0H1I2J3K4L",
|
||
* "services": [
|
||
* {
|
||
* "id": 1,
|
||
* "kind": "expertise_service",
|
||
* "service_type": "onsite",
|
||
* "charge_type": "time",
|
||
* "price": 12900,
|
||
* "currency_code": "CNY",
|
||
* "duration": 90,
|
||
* "enabled": true
|
||
* }
|
||
* ]
|
||
* }
|
||
* ]
|
||
*/
|
||
expertises?: {
|
||
/** @example 1 */
|
||
id?: number;
|
||
/** @example expertise */
|
||
kind?: string;
|
||
/** @example 清洗空调 */
|
||
name?: string;
|
||
/** @example 空调深度清洗 */
|
||
description?: string;
|
||
/**
|
||
* @example [
|
||
* "家电"
|
||
* ]
|
||
*/
|
||
tags?: string[];
|
||
/** @example 01HQ8M4Z2A3B5C6D7E8F9G0H1I2J3K4L */
|
||
user_uid?: string;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "id": 1,
|
||
* "kind": "expertise_service",
|
||
* "service_type": "onsite",
|
||
* "charge_type": "time",
|
||
* "price": 12900,
|
||
* "currency_code": "CNY",
|
||
* "duration": 90,
|
||
* "enabled": true
|
||
* }
|
||
* ]
|
||
*/
|
||
services?: {
|
||
/** @example 1 */
|
||
id?: number;
|
||
/** @example expertise_service */
|
||
kind?: string;
|
||
/** @example onsite */
|
||
service_type?: string;
|
||
/** @example time */
|
||
charge_type?: string;
|
||
/** @example 12900 */
|
||
price?: number;
|
||
/** @example CNY */
|
||
currency_code?: string;
|
||
/** @example 90 */
|
||
duration?: number;
|
||
/** @example true */
|
||
enabled?: boolean;
|
||
}[];
|
||
}[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 您无权访问此资源。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 用户不存在 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/sid/rules": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* 规则列表
|
||
* @description 获取当前 SID 规则开关列表。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description success */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "id": 1,
|
||
* "key": "all_same_letters",
|
||
* "description": "全相同字母",
|
||
* "enabled": true
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example 1 */
|
||
id?: number;
|
||
/** @example all_same_letters */
|
||
key?: string;
|
||
/** @example 全相同字母 */
|
||
description?: string;
|
||
/** @example true */
|
||
enabled?: boolean;
|
||
}[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/sid/rules/{key}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
key: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
/**
|
||
* 更新规则开关
|
||
* @description 更新指定 SID 规则开关状态。
|
||
*/
|
||
put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
key: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 是否启用。
|
||
* @example false
|
||
*/
|
||
enabled: boolean;
|
||
/**
|
||
* @description 规则描述。
|
||
* @example Eius et animi quos velit et.
|
||
*/
|
||
description?: string | null;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description success */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example 1 */
|
||
id?: number;
|
||
/** @example all_same_letters */
|
||
key?: string;
|
||
/** @example 全相同字母 */
|
||
description?: string;
|
||
/** @example false */
|
||
enabled?: boolean;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/sid/lucky-numbers": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* 吉利号列表
|
||
* @description 获取已配置的吉利号列表。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description success */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "id": 1,
|
||
* "number": "888",
|
||
* "category": "顶级超级吉利",
|
||
* "enabled": true
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example 1 */
|
||
id?: number;
|
||
/** @example 888 */
|
||
number?: string;
|
||
/** @example 顶级超级吉利 */
|
||
category?: string;
|
||
/** @example true */
|
||
enabled?: boolean;
|
||
}[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
/**
|
||
* 新增吉利号
|
||
* @description 新增一条吉利号配置。
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 3位数字吉利号。
|
||
* @example 888
|
||
*/
|
||
number: string;
|
||
/**
|
||
* @description 分类标签。
|
||
* @example 顶级超级吉利
|
||
*/
|
||
category?: string | null;
|
||
/**
|
||
* @description 是否启用。
|
||
* @example false
|
||
*/
|
||
enabled?: boolean;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description success */
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example 10 */
|
||
id?: number;
|
||
/** @example 888 */
|
||
number?: string;
|
||
/** @example 顶级超级吉利 */
|
||
category?: string;
|
||
/** @example true */
|
||
enabled?: boolean;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/sid/lucky-numbers/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the lucky number.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
/**
|
||
* 更新吉利号
|
||
* @description 更新吉利号的状态或分类。
|
||
*/
|
||
put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the lucky number.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 分类标签。
|
||
* @example architecto
|
||
*/
|
||
category?: string | null;
|
||
/**
|
||
* @description 是否启用。
|
||
* @example false
|
||
*/
|
||
enabled?: boolean;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description success */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example 10 */
|
||
id?: number;
|
||
/** @example 888 */
|
||
number?: string;
|
||
/** @example 顶级超级吉利 */
|
||
category?: string;
|
||
/** @example false */
|
||
enabled?: boolean;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post?: never;
|
||
/**
|
||
* 删除吉利号
|
||
* @description 删除指定吉利号。
|
||
*/
|
||
delete: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the lucky number.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description success */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/** @example null */
|
||
data?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/sid/check": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* 校验 SID 是否保留
|
||
* @description 判断 SID 是否命中保留规则。
|
||
*/
|
||
post: operations["SID"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/sid/assign": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* [用户SID] 分配用户 SID
|
||
* @description 管理员为用户分配或覆盖 SID。
|
||
*/
|
||
post: operations["SIDSID"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/users": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [用户管理] 用户列表
|
||
* @description 分页返回平台用户列表,支持关键字、状态、机器人账号与角色过滤。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 可选。按邮箱/用户名/昵称/手机号/UID/SID 模糊搜索。 示例: admin
|
||
* @example architecto
|
||
*/
|
||
q?: string;
|
||
/**
|
||
* @description 可选。按启用状态过滤(1/0)。 示例: 1
|
||
* @example false
|
||
*/
|
||
status?: boolean;
|
||
/**
|
||
* @description 可选。按是否机器人账号过滤(1/0)。 示例: 1
|
||
* @example false
|
||
*/
|
||
is_robot?: boolean;
|
||
/**
|
||
* @description 可选。按角色名精确过滤。 示例: service-provider
|
||
* @example architecto
|
||
*/
|
||
role?: string;
|
||
/**
|
||
* @description 可选。页码。 示例: 1
|
||
* @example 16
|
||
*/
|
||
page?: number;
|
||
/**
|
||
* @description 可选。每页数量,最大100。 示例: 20
|
||
* @example 16
|
||
*/
|
||
page_size?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description Must not be greater than 100 characters.
|
||
* @example b
|
||
*/
|
||
q?: string | null;
|
||
/** @example true */
|
||
status?: boolean | null;
|
||
/** @example true */
|
||
is_robot?: boolean | null;
|
||
/**
|
||
* @description Must not be greater than 100 characters.
|
||
* @example n
|
||
*/
|
||
role?: string | null;
|
||
/**
|
||
* @description Must be at least 1.
|
||
* @example 67
|
||
*/
|
||
page?: number | null;
|
||
/**
|
||
* @description Must be at least 1. Must not be greater than 100.
|
||
* @example 16
|
||
*/
|
||
page_size?: number | null;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "user",
|
||
* "uid": "01HQ8M4Z2A3B5C6D7E8F9G0H1I2J3K4L",
|
||
* "sid": "ABC168888",
|
||
* "sid_display": "ABC-168888",
|
||
* "username": "admin",
|
||
* "display_name": "管理员",
|
||
* "email": "[email protected]",
|
||
* "phone": "+1234567890",
|
||
* "country_code": "USA",
|
||
* "avatar": null,
|
||
* "expertise": "平台管理",
|
||
* "city": "旧金山",
|
||
* "timezone": "America/Los_Angeles",
|
||
* "timezone_offset": -480,
|
||
* "locale": null,
|
||
* "status": true,
|
||
* "is_robot": false,
|
||
* "email_verified_at": "2026-07-11T09:00:00.000000Z",
|
||
* "phone_verified_at": null,
|
||
* "roles": [
|
||
* "admin"
|
||
* ],
|
||
* "created_at": "2026-07-11T08:00:00.000000Z",
|
||
* "updated_at": "2026-07-11T08:00:00.000000Z"
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example user */
|
||
kind?: string;
|
||
/** @example 01HQ8M4Z2A3B5C6D7E8F9G0H1I2J3K4L */
|
||
uid?: string;
|
||
/** @example ABC168888 */
|
||
sid?: string;
|
||
/** @example ABC-168888 */
|
||
sid_display?: string;
|
||
/** @example admin */
|
||
username?: string;
|
||
/** @example 管理员 */
|
||
display_name?: string;
|
||
/** @example [email protected] */
|
||
email?: string;
|
||
/** @example +1234567890 */
|
||
phone?: string;
|
||
/** @example USA */
|
||
country_code?: string;
|
||
/** @example null */
|
||
avatar?: string;
|
||
/** @example 平台管理 */
|
||
expertise?: string;
|
||
/** @example 旧金山 */
|
||
city?: string;
|
||
/** @example America/Los_Angeles */
|
||
timezone?: string;
|
||
/** @example -480 */
|
||
timezone_offset?: number;
|
||
/** @example null */
|
||
locale?: string;
|
||
/** @example true */
|
||
status?: boolean;
|
||
/** @example false */
|
||
is_robot?: boolean;
|
||
/** @example 2026-07-11T09:00:00.000000Z */
|
||
email_verified_at?: string;
|
||
/** @example null */
|
||
phone_verified_at?: string;
|
||
/**
|
||
* @example [
|
||
* "admin"
|
||
* ]
|
||
*/
|
||
roles?: string[];
|
||
/** @example 2026-07-11T08:00:00.000000Z */
|
||
created_at?: string;
|
||
/** @example 2026-07-11T08:00:00.000000Z */
|
||
updated_at?: string;
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 您无权访问此资源。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/users/{uid}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
uid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [用户管理] 用户详情
|
||
* @description 返回指定用户的完整信息,包括邮箱、手机号、验证状态与角色。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
uid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example user */
|
||
kind?: string;
|
||
/** @example 01HQ8M4Z2A3B5C6D7E8F9G0H1I2J3K4L */
|
||
uid?: string;
|
||
/** @example ABC168888 */
|
||
sid?: string;
|
||
/** @example ABC-168888 */
|
||
sid_display?: string;
|
||
/** @example admin */
|
||
username?: string;
|
||
/** @example 管理员 */
|
||
display_name?: string;
|
||
/** @example [email protected] */
|
||
email?: string;
|
||
/** @example +1234567890 */
|
||
phone?: string;
|
||
/** @example USA */
|
||
country_code?: string;
|
||
/** @example null */
|
||
avatar?: string;
|
||
/** @example 平台管理 */
|
||
expertise?: string;
|
||
/** @example 旧金山 */
|
||
city?: string;
|
||
/** @example America/Los_Angeles */
|
||
timezone?: string;
|
||
/** @example -480 */
|
||
timezone_offset?: number;
|
||
/** @example null */
|
||
locale?: string;
|
||
/** @example true */
|
||
status?: boolean;
|
||
/** @example false */
|
||
is_robot?: boolean;
|
||
/** @example 2026-07-11T09:00:00.000000Z */
|
||
email_verified_at?: string;
|
||
/** @example null */
|
||
phone_verified_at?: string;
|
||
/**
|
||
* @example [
|
||
* "admin"
|
||
* ]
|
||
*/
|
||
roles?: string[];
|
||
/** @example 2026-07-11T08:00:00.000000Z */
|
||
created_at?: string;
|
||
/** @example 2026-07-11T08:00:00.000000Z */
|
||
updated_at?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 用户不存在 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/users/{uid}/status": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
uid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
/**
|
||
* [用户管理] 启用/禁用用户
|
||
* @description 更新用户启用状态。禁用用户时,其全部有效访问令牌将被吊销,
|
||
* 且无法再通过密码或验证码登录;重新启用后恢复登录能力。
|
||
*/
|
||
put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
uid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 是否启用。
|
||
* @example false
|
||
*/
|
||
status: boolean;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example user */
|
||
kind?: string;
|
||
/** @example 01HQ8M4Z2A3B5C6D7E8F9G0H1I2J3K4L */
|
||
uid?: string;
|
||
/** @example false */
|
||
status?: boolean;
|
||
/** @example [] */
|
||
roles?: unknown[];
|
||
};
|
||
/** @example 用户状态更新成功 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 用户不存在 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example 数据验证失败 */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "不能禁用当前登录的管理员账号"
|
||
* ]
|
||
*/
|
||
uid?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/resume/import-batches": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* 查询批量导入历史
|
||
* @description 需要 admin:resume:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description success */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "id": "01K9ZC0J8N7Q2W5X3Y6R4T8V1B",
|
||
* "kind": "resume-import-batch",
|
||
* "status": "completed",
|
||
* "counts": {
|
||
* "created": 141,
|
||
* "skipped_duplicate": 38
|
||
* }
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B */
|
||
id?: string;
|
||
/** @example resume-import-batch */
|
||
kind?: string;
|
||
/** @example completed */
|
||
status?: string;
|
||
counts?: {
|
||
/** @example 141 */
|
||
created?: number;
|
||
/** @example 38 */
|
||
skipped_duplicate?: number;
|
||
};
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
/** @example 获取批量导入列表成功。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
/**
|
||
* 创建批量导入任务
|
||
* @description 上传 ZIP 压缩包,立即返回 202 与批次记录,随后轮询批次详情查看进度。
|
||
* 压缩包会在后台解包,每份简历生成一条导入记录。
|
||
*
|
||
* 建议先用 `dryRun=true` 试运行:只统计将会创建 / 跳过的数量,不写入任何用户。
|
||
*
|
||
* 需要 admin:resume:manage 权限。
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"multipart/form-data": {
|
||
/**
|
||
* Format: binary
|
||
* @description 包含多份简历的 ZIP 压缩包。. Must be a file. Must not be greater than 51200 kilobytes.
|
||
*/
|
||
archive: string;
|
||
/**
|
||
* @description ISO 3166-1 alpha-3 国家代码,用于解析简历中缺少国际区号的手机号。默认 CHN。. Must be 3 characters.
|
||
* @example CHN
|
||
*/
|
||
countryCode?: string | null;
|
||
/**
|
||
* @description 可选的语言提示。. Must not be greater than 16 characters.
|
||
* @example zh
|
||
*/
|
||
languageHint?: string | null;
|
||
/**
|
||
* @description 可选的简历结构版本号。. Must not be greater than 16 characters.
|
||
* @example 1.0
|
||
*/
|
||
schemaVersion?: string | null;
|
||
/**
|
||
* @description 试运行:解析并统计结果,但不创建任何用户。确认后再调用 confirm 接口。.
|
||
* @example false
|
||
*/
|
||
dryRun?: boolean | null;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description idempotent_replay */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B */
|
||
id?: string;
|
||
/** @example processing */
|
||
status?: string;
|
||
};
|
||
/** @example 简历批量导入任务已创建。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
/** @description queued */
|
||
202: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B */
|
||
id?: string;
|
||
/** @example resume-import-batch */
|
||
kind?: string;
|
||
/** @example queued */
|
||
status?: string;
|
||
/** @example false */
|
||
dryRun?: boolean;
|
||
progress?: {
|
||
/** @example 0 */
|
||
total?: number;
|
||
/** @example 0 */
|
||
processed?: number;
|
||
/** @example 0 */
|
||
percent?: number;
|
||
};
|
||
counts?: Record<string, never>;
|
||
archive?: {
|
||
/** @example resumes.zip */
|
||
filename?: string;
|
||
/** @example 10485760 */
|
||
size?: number;
|
||
};
|
||
/** @example /api/admin/v1/resume/import-batches/01K9ZC0J8N7Q2W5X3Y6R4T8V1B */
|
||
pollUrl?: string;
|
||
};
|
||
/** @example 简历批量导入任务已创建。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
/** @description unauthenticated */
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
/** @description forbidden */
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHORIZED */
|
||
code?: string;
|
||
/** @example 无权访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
/** @description invalid_archive */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The archive must be a file of type: application/zip. */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/resume/import-batches/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the import batch.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
/**
|
||
* @description 批次 ID。
|
||
* @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B
|
||
*/
|
||
batch: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* 查询批次进度与统计
|
||
* @description 轮询该接口直到 status 为 completed 或 failed。counts 给出各处理结果的数量:
|
||
* created(已创建)、skipped_duplicate(手机号已存在,跳过)、needs_contact(缺少联系方式)、
|
||
* would_create(试运行下将会创建)等。
|
||
*
|
||
* 需要 admin:resume:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the import batch.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
/**
|
||
* @description 批次 ID。
|
||
* @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B
|
||
*/
|
||
batch: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description processing */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B */
|
||
id?: string;
|
||
/** @example processing */
|
||
status?: string;
|
||
progress?: {
|
||
/** @example 200 */
|
||
total?: number;
|
||
/** @example 87 */
|
||
processed?: number;
|
||
/** @example 44 */
|
||
percent?: number;
|
||
};
|
||
counts?: {
|
||
/** @example 61 */
|
||
created?: number;
|
||
/** @example 20 */
|
||
skipped_duplicate?: number;
|
||
/** @example 6 */
|
||
needs_contact?: number;
|
||
};
|
||
};
|
||
/** @example 获取批量导入记录成功。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
/** @description not_found */
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 记录不存在。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/resume/import-batches/{batch}/items": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 批次 ID。
|
||
* @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B
|
||
*/
|
||
batch: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* 查询批次内的简历明细
|
||
* @description 可按 outcome / status 筛选,例如只看 needs_contact 的记录以便补充联系方式。
|
||
* 列表不返回解析结果正文与联系方式,需要时请查询单条明细。
|
||
*
|
||
* 需要 admin:resume:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 页码。. Must be at least 1.
|
||
* @example 1
|
||
*/
|
||
page?: number | null;
|
||
/**
|
||
* @description 每页数量,最大 100。. Must be between 1 and 100.
|
||
* @example 20
|
||
*/
|
||
page_size?: number | null;
|
||
/**
|
||
* @description 按处理结果筛选。.
|
||
* @example skipped_duplicate
|
||
*/
|
||
outcome?: "created" | "would_create" | "skipped_duplicate" | "reused_import" | "needs_contact" | "duplicate_file" | "unsupported_entry" | "entry_too_large" | "parse_failed" | "failed" | null;
|
||
/**
|
||
* @description 按解析状态筛选。.
|
||
* @example completed
|
||
*/
|
||
status?: "queued" | "processing" | "completed" | "failed" | null;
|
||
/**
|
||
* @description 按文件名模糊搜索。. Must not be greater than 255 characters.
|
||
* @example zhang
|
||
*/
|
||
q?: string | null;
|
||
};
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 批次 ID。
|
||
* @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B
|
||
*/
|
||
batch: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description success */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "id": "01K9ZD0J8N7Q2W5X3Y6R4T8V1C",
|
||
* "kind": "resume-import",
|
||
* "status": "completed",
|
||
* "outcome": "skipped_duplicate",
|
||
* "matchedUserUid": "01HJQYX8RN4M7T5E7S2P9F1V3K",
|
||
* "document": {
|
||
* "filename": "zhangsan.pdf"
|
||
* }
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example 01K9ZD0J8N7Q2W5X3Y6R4T8V1C */
|
||
id?: string;
|
||
/** @example resume-import */
|
||
kind?: string;
|
||
/** @example completed */
|
||
status?: string;
|
||
/** @example skipped_duplicate */
|
||
outcome?: string;
|
||
/** @example 01HJQYX8RN4M7T5E7S2P9F1V3K */
|
||
matchedUserUid?: string;
|
||
document?: {
|
||
/** @example zhangsan.pdf */
|
||
filename?: string;
|
||
};
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
/** @example 获取批量导入明细成功。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/resume/import-batches/{batch_id}/items/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the batch.
|
||
* @example architecto
|
||
*/
|
||
batch_id: string;
|
||
/**
|
||
* @description The ID of the item.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
/**
|
||
* @description 批次 ID。
|
||
* @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B
|
||
*/
|
||
batch: string;
|
||
/**
|
||
* @description 简历导入记录 ID。
|
||
* @example 01K9ZD0J8N7Q2W5X3Y6R4T8V1C
|
||
*/
|
||
item: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* 查询单条简历导入明细
|
||
* @description 返回完整解析结果,结构与公开接口 /api/v1/resume-parser/imports/{id} 的 result 一致。
|
||
*
|
||
* 需要 admin:resume:read 权限。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the batch.
|
||
* @example architecto
|
||
*/
|
||
batch_id: string;
|
||
/**
|
||
* @description The ID of the item.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
/**
|
||
* @description 批次 ID。
|
||
* @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B
|
||
*/
|
||
batch: string;
|
||
/**
|
||
* @description 简历导入记录 ID。
|
||
* @example 01K9ZD0J8N7Q2W5X3Y6R4T8V1C
|
||
*/
|
||
item: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 记录不存在。 */
|
||
message?: string;
|
||
} | {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example The requested resource was not found. */
|
||
message?: string;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
/**
|
||
* 补充联系方式
|
||
* @description 用于解决 needs_contact 的记录:提供手机号或邮箱后立即校验是否与已有用户冲突,
|
||
* 无冲突则排队建号。不会重新解析简历。
|
||
*
|
||
* 需要 admin:resume:manage 权限。
|
||
*/
|
||
patch: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the batch.
|
||
* @example architecto
|
||
*/
|
||
batch_id: string;
|
||
/**
|
||
* @description The ID of the item.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
/**
|
||
* @description 批次 ID。
|
||
* @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B
|
||
*/
|
||
batch: string;
|
||
/**
|
||
* @description 简历导入记录 ID。
|
||
* @example 01K9ZD0J8N7Q2W5X3Y6R4T8V1C
|
||
*/
|
||
item: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 手机号。缺少国际区号时按批次的 countryCode 解析,并统一存储为 E.164 格式。. This field is required when <code>email</code> is not present. Must not be greater than 32 characters.
|
||
* @example 13800138000
|
||
*/
|
||
phone?: string | null;
|
||
/**
|
||
* @description 邮箱地址,当没有手机号时作为身份标识。. This field is required when <code>phone</code> is not present. Must be a valid email address. Must not be greater than 255 characters.
|
||
* @example [email protected]
|
||
*/
|
||
email?: string | null;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description queued */
|
||
202: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example 01K9ZD0J8N7Q2W5X3Y6R4T8V1C */
|
||
id?: string;
|
||
/** @example phone */
|
||
identityType?: string;
|
||
};
|
||
/** @example 已重新排队。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
/** @description duplicate */
|
||
409: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example IMPORT_IDENTITY_TAKEN */
|
||
code?: string;
|
||
/** @example 该联系方式已属于其他用户。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
/** @description invalid_phone */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example INVALID_PHONE */
|
||
code?: string;
|
||
/** @example 手机号格式无效。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/resume/import-batches/{batch}/confirm": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 批次 ID。
|
||
* @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B
|
||
*/
|
||
batch: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* 确认试运行批次
|
||
* @description 将 dryRun 批次转为正式导入:为所有 would_create 的记录创建用户。
|
||
* 不会重新解析简历(结果已存在),因此不产生额外的模型调用费用。
|
||
*
|
||
* 需要 admin:resume:manage 权限。
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 批次 ID。
|
||
* @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B
|
||
*/
|
||
batch: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description confirmed */
|
||
202: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B */
|
||
id?: string;
|
||
/** @example false */
|
||
dryRun?: boolean;
|
||
};
|
||
/** @example 已确认批量导入,正在创建用户。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
/** @description not_dry_run */
|
||
409: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example BATCH_NOT_DRY_RUN */
|
||
code?: string;
|
||
/** @example 该批次不是试运行,无需确认。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/resume/import-batches/{batch}/retry": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 批次 ID。
|
||
* @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B
|
||
*/
|
||
batch: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* 重试批次内所有失败的简历
|
||
* @description 需要 admin:resume:manage 权限。
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 批次 ID。
|
||
* @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B
|
||
*/
|
||
batch: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description requeued */
|
||
202: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example 3 */
|
||
requeued?: number;
|
||
};
|
||
/** @example 已重新排队。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/resume/import-batches/{batch}/items/{item}/retry": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 批次 ID。
|
||
* @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B
|
||
*/
|
||
batch: string;
|
||
/**
|
||
* @description 简历导入记录 ID。
|
||
* @example 01K9ZD0J8N7Q2W5X3Y6R4T8V1C
|
||
*/
|
||
item: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* 重试单条简历
|
||
* @description 会自动判断从哪一步继续:解析失败则重新解析(已提取的正文会复用,不重复产生 OCR 费用),
|
||
* 仅建号失败则只重新建号。
|
||
*
|
||
* 需要 admin:resume:manage 权限。
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 批次 ID。
|
||
* @example 01K9ZC0J8N7Q2W5X3Y6R4T8V1B
|
||
*/
|
||
batch: string;
|
||
/**
|
||
* @description 简历导入记录 ID。
|
||
* @example 01K9ZD0J8N7Q2W5X3Y6R4T8V1C
|
||
*/
|
||
item: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description requeued */
|
||
202: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example 01K9ZD0J8N7Q2W5X3Y6R4T8V1C */
|
||
id?: string;
|
||
/** @example queued */
|
||
status?: string;
|
||
};
|
||
/** @example 已重新排队。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
409: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example IMPORT_NEEDS_CONTACT */
|
||
code?: string;
|
||
/** @example 该简历缺少手机号或邮箱,请先补充联系方式。 */
|
||
message?: string;
|
||
} | {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example IMPORT_NOT_RETRYABLE */
|
||
code?: string;
|
||
/** @example 只有失败的导入任务可以重试。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/auth/login/otp": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* [管理后台] 请求OTP验证码
|
||
* @description Request OTP code for admin login via email or SMS
|
||
*/
|
||
post: operations["OTP"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/auth/login/verify-otp": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* [管理后台] 验证OTP验证码
|
||
* @description Verify OTP code for admin login and return access token
|
||
*/
|
||
post: operations["OTP"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/auth/login/password": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* [管理后台] 密码登录
|
||
* @description Login admin user with identity and password
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description Admin identity (email).
|
||
* @example [email protected]
|
||
*/
|
||
identity: string;
|
||
/**
|
||
* @description Admin password.
|
||
* @example admin123
|
||
*/
|
||
password: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description success */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6... */
|
||
access_token?: string;
|
||
/** @example Bearer */
|
||
token_type?: string;
|
||
/** @example 900 */
|
||
expires_in?: number;
|
||
/** @example refresh-token-string */
|
||
refresh_token?: string;
|
||
};
|
||
/** @example Admin login successful */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
/** @description invalid_credentials */
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example INVALID_CREDENTIALS */
|
||
code?: string;
|
||
/** @example Invalid admin credentials */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
/** @description validation_error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example Validation failed */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "Identity is required"
|
||
* ]
|
||
*/
|
||
identity?: string[];
|
||
/**
|
||
* @example [
|
||
* "Password is required"
|
||
* ]
|
||
*/
|
||
password?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/auth/robots/{uid}/token": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
uid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* [管理后台] 为机器人账号签发会话令牌
|
||
* @description 为指定机器人账号签发一组 OAuth 访问令牌和刷新令牌。
|
||
*/
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
uid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: never;
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/auth/me": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* Get the current admin user with roles and permissions
|
||
* @description Returns the authenticated user plus their roles and effective permissions
|
||
* (role-derived + direct) so the admin frontend can render permission-aware UI.
|
||
*/
|
||
get: operations["getTheCurrentAdminUserWithRolesAndPermissions"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/auth/roles": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** [角色管理] 角色列表 */
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "role",
|
||
* "name": "moderator",
|
||
* "permissions": [
|
||
* "admin:comment:read"
|
||
* ],
|
||
* "users_count": 1,
|
||
* "builtin": false
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example role */
|
||
kind?: string;
|
||
/** @example moderator */
|
||
name?: string;
|
||
/**
|
||
* @example [
|
||
* "admin:comment:read"
|
||
* ]
|
||
*/
|
||
permissions?: string[];
|
||
/** @example 1 */
|
||
users_count?: number;
|
||
/** @example false */
|
||
builtin?: boolean;
|
||
}[];
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
/** [角色管理] 新建角色 */
|
||
post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 角色名(唯一)。
|
||
* @example reviewer
|
||
*/
|
||
name: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example role */
|
||
kind?: string;
|
||
/** @example reviewer */
|
||
name?: string;
|
||
/** @example [] */
|
||
permissions?: unknown[];
|
||
/** @example 0 */
|
||
users_count?: number;
|
||
/** @example false */
|
||
builtin?: boolean;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/auth/roles/{role}/permissions": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 角色名。
|
||
* @example moderator
|
||
*/
|
||
role: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
/**
|
||
* [角色管理] 同步角色权限
|
||
* @description 全量替换该角色的权限集合。super-admin 角色不可修改。
|
||
*/
|
||
put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 角色名。
|
||
* @example moderator
|
||
*/
|
||
role: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 权限键列表。
|
||
* @example [
|
||
* "admin:comment:read"
|
||
* ]
|
||
*/
|
||
permissions: string[];
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example role */
|
||
kind?: string;
|
||
/** @example moderator */
|
||
name?: string;
|
||
/**
|
||
* @example [
|
||
* "admin:comment:read"
|
||
* ]
|
||
*/
|
||
permissions?: string[];
|
||
/** @example 1 */
|
||
users_count?: number;
|
||
/** @example false */
|
||
builtin?: boolean;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "super-admin role cannot be modified."
|
||
* ]
|
||
*/
|
||
role?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/auth/roles/{id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the role.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
/**
|
||
* @description 角色名。
|
||
* @example reviewer
|
||
*/
|
||
role: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
post?: never;
|
||
/**
|
||
* [角色管理] 删除角色
|
||
* @description 内建角色与仍有用户的角色不可删除。
|
||
*/
|
||
delete: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the role.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
/**
|
||
* @description 角色名。
|
||
* @example reviewer
|
||
*/
|
||
role: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/** @example Role deleted */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/auth/permissions": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [角色管理] 权限目录
|
||
* @description 按模块/分组返回全部已注册权限键及描述,用于权限矩阵渲染。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
comment?: {
|
||
/** @example comment */
|
||
module?: string;
|
||
groups?: {
|
||
admin?: {
|
||
/** @example View reported comments */
|
||
"admin:comment:read"?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/auth/users": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** [角色管理] 搜索用户(角色分配用) */
|
||
get: {
|
||
parameters: {
|
||
query: {
|
||
/**
|
||
* @description 按邮箱/用户名/UID 模糊搜索。 示例: moderator
|
||
* @example architecto
|
||
*/
|
||
q: string;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description Must not be greater than 100 characters.
|
||
* @example b
|
||
*/
|
||
q: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "role_user",
|
||
* "uid": "01HXXXX",
|
||
* "display_name": "内容审核员",
|
||
* "email": "[email protected]",
|
||
* "roles": [
|
||
* "moderator"
|
||
* ]
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example role_user */
|
||
kind?: string;
|
||
/** @example 01HXXXX */
|
||
uid?: string;
|
||
/** @example 内容审核员 */
|
||
display_name?: string;
|
||
/** @example [email protected] */
|
||
email?: string;
|
||
/**
|
||
* @example [
|
||
* "moderator"
|
||
* ]
|
||
*/
|
||
roles?: string[];
|
||
}[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/auth/users/{uid}/roles": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 用户 UID。
|
||
* @example 01HXXXX
|
||
*/
|
||
uid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
/**
|
||
* [角色管理] 分配用户角色
|
||
* @description 全量替换用户的角色集合。不能修改自己的角色。
|
||
*/
|
||
put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 用户 UID。
|
||
* @example 01HXXXX
|
||
*/
|
||
uid: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 角色名列表。
|
||
* @example [
|
||
* "moderator"
|
||
* ]
|
||
*/
|
||
roles: string[];
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example role_user */
|
||
kind?: string;
|
||
/** @example 01HXXXX */
|
||
uid?: string;
|
||
/**
|
||
* @example [
|
||
* "moderator"
|
||
* ]
|
||
*/
|
||
roles?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "You cannot modify your own roles."
|
||
* ]
|
||
*/
|
||
uid?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/comments/reported": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [评论审核] 被举报评论列表
|
||
* @description 按被举报的评论分组列出举报,附带举报明细与屏蔽状态。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 可选。按状态过滤: pending(有待处理举报), blocked(已屏蔽), all(默认)。 示例: pending
|
||
* @example architecto
|
||
*/
|
||
status?: string;
|
||
/**
|
||
* @description 可选。页码。 示例: 1
|
||
* @example 16
|
||
*/
|
||
page?: number;
|
||
/**
|
||
* @description 可选。每页数量,最大100。 示例: 20
|
||
* @example 16
|
||
*/
|
||
page_size?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @example blocked
|
||
* @enum {string|null}
|
||
*/
|
||
status?: "pending" | "blocked" | "all" | null;
|
||
/**
|
||
* @description Must be at least 1.
|
||
* @example 16
|
||
*/
|
||
page?: number | null;
|
||
/**
|
||
* @description Must be at least 1. Must not be greater than 100.
|
||
* @example 22
|
||
*/
|
||
page_size?: number | null;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "kind": "reported_comment",
|
||
* "id": 10,
|
||
* "body": "这条评论包含垃圾推广链接",
|
||
* "body_format": "markdown",
|
||
* "status": "active",
|
||
* "is_blocked": false,
|
||
* "blocked_at": null,
|
||
* "blocked_by_uid": null,
|
||
* "author": {
|
||
* "uid": "01HYYYY",
|
||
* "display_name": "Bob"
|
||
* },
|
||
* "open_reports_count": 2,
|
||
* "latest_report_at": "2026-07-11T10:10:00Z",
|
||
* "reports": [
|
||
* {
|
||
* "id": 1,
|
||
* "reason": "spam",
|
||
* "message": "含有垃圾推广链接",
|
||
* "status": "open",
|
||
* "reporter": {
|
||
* "uid": "01HXXXX",
|
||
* "display_name": "Alice"
|
||
* },
|
||
* "created_at": "2026-07-11T10:10:00Z",
|
||
* "handled_at": null
|
||
* }
|
||
* ],
|
||
* "created_at": "2026-07-10T09:00:00Z"
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example reported_comment */
|
||
kind?: string;
|
||
/** @example 10 */
|
||
id?: number;
|
||
/** @example 这条评论包含垃圾推广链接 */
|
||
body?: string;
|
||
/** @example markdown */
|
||
body_format?: string;
|
||
/** @example active */
|
||
status?: string;
|
||
/** @example false */
|
||
is_blocked?: boolean;
|
||
/** @example null */
|
||
blocked_at?: string;
|
||
/** @example null */
|
||
blocked_by_uid?: string;
|
||
author?: {
|
||
/** @example 01HYYYY */
|
||
uid?: string;
|
||
/** @example Bob */
|
||
display_name?: string;
|
||
};
|
||
/** @example 2 */
|
||
open_reports_count?: number;
|
||
/** @example 2026-07-11T10:10:00Z */
|
||
latest_report_at?: string;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "id": 1,
|
||
* "reason": "spam",
|
||
* "message": "含有垃圾推广链接",
|
||
* "status": "open",
|
||
* "reporter": {
|
||
* "uid": "01HXXXX",
|
||
* "display_name": "Alice"
|
||
* },
|
||
* "created_at": "2026-07-11T10:10:00Z",
|
||
* "handled_at": null
|
||
* }
|
||
* ]
|
||
*/
|
||
reports?: {
|
||
/** @example 1 */
|
||
id?: number;
|
||
/** @example spam */
|
||
reason?: string;
|
||
/** @example 含有垃圾推广链接 */
|
||
message?: string;
|
||
/** @example open */
|
||
status?: string;
|
||
reporter?: {
|
||
/** @example 01HXXXX */
|
||
uid?: string;
|
||
/** @example Alice */
|
||
display_name?: string;
|
||
};
|
||
/** @example 2026-07-11T10:10:00Z */
|
||
created_at?: string;
|
||
/** @example null */
|
||
handled_at?: string;
|
||
}[];
|
||
/** @example 2026-07-10T09:00:00Z */
|
||
created_at?: string;
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example null */
|
||
next_page?: string;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 1 */
|
||
total_count?: number;
|
||
/** @example 1 */
|
||
total_pages?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/comments/reported/{comment}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 评论 ID。
|
||
* @example 10
|
||
*/
|
||
comment: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
/**
|
||
* [评论审核] 处理被举报评论
|
||
* @description approve: 举报成立,屏蔽评论并将其全部待处理举报标记已处理;
|
||
* reject: 举报不成立,驳回全部待处理举报;
|
||
* revert: 撤销屏蔽(仅对已屏蔽评论有效),举报记录保留。
|
||
*/
|
||
patch: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 评论 ID。
|
||
* @example 10
|
||
*/
|
||
comment: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 处理动作: approve, reject, revert。
|
||
* @example approve
|
||
*/
|
||
action: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example reported_comment */
|
||
kind?: string;
|
||
/** @example 10 */
|
||
id?: number;
|
||
/** @example true */
|
||
is_blocked?: boolean;
|
||
/** @example 2026-07-11T10:20:00Z */
|
||
blocked_at?: string;
|
||
/** @example 01HXXXX */
|
||
blocked_by_uid?: string;
|
||
/** @example 0 */
|
||
open_reports_count?: number;
|
||
};
|
||
/** @example Moderation applied */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example The given data was invalid. */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "Comment is not blocked."
|
||
* ]
|
||
*/
|
||
action?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/notification/devices/stats": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [管理] 获取设备统计信息
|
||
* @description 获取系统级别的设备统计数据。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example 150 */
|
||
total_devices?: number;
|
||
/** @example 89 */
|
||
online_devices?: number;
|
||
platform_stats?: {
|
||
/** @example 45 */
|
||
ios?: number;
|
||
/** @example 67 */
|
||
android?: number;
|
||
/** @example 23 */
|
||
web?: number;
|
||
/** @example 15 */
|
||
desktop?: number;
|
||
};
|
||
};
|
||
/** @example Device statistics retrieved successfully */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
400: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example Failed to retrieve statistics: [error message] */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/api/admin/v1/notification/devices": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* [管理] 获取设备列表
|
||
* @description 获取所有设备的分页列表,支持按平台、在线状态等筛选。
|
||
*/
|
||
get: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description 可选。按平台筛选 (ios, android, web, desktop)
|
||
* @example architecto
|
||
*/
|
||
platform?: string;
|
||
/**
|
||
* @description 可选。按在线状态筛选
|
||
* @example false
|
||
*/
|
||
is_online?: boolean;
|
||
/**
|
||
* @description 可选。页码 (默认: 1)
|
||
* @example 16
|
||
*/
|
||
page?: number;
|
||
/**
|
||
* @description 可选。每页条数 (默认: 20, 最大: 100)
|
||
* @example 16
|
||
*/
|
||
page_size?: number;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @example web
|
||
* @enum {string|null}
|
||
*/
|
||
platform?: "ios" | "android" | "web" | "desktop" | null;
|
||
/** @example true */
|
||
is_online?: boolean | null;
|
||
/**
|
||
* @description Must be at least 1.
|
||
* @example 16
|
||
*/
|
||
page?: number | null;
|
||
/**
|
||
* @description Must be at least 1. Must not be greater than 100.
|
||
* @example 22
|
||
*/
|
||
page_size?: number | null;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "id": "01HN1234567890ABCDEF",
|
||
* "device_client_id": "device_123",
|
||
* "platform": "ios",
|
||
* "app_key": "app_v1",
|
||
* "device_model": "iPhone 12",
|
||
* "push_token": "push_token_here",
|
||
* "websocket_session_id": "ws_session_123",
|
||
* "last_seen_at": "2023-11-15T07:30:00.000000Z",
|
||
* "is_online": true,
|
||
* "kind": "device",
|
||
* "active_sessions_count": 2,
|
||
* "created_at": "2023-11-01T00:00:00.000000Z",
|
||
* "updated_at": "2023-11-15T07:30:00.000000Z"
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example 01HN1234567890ABCDEF */
|
||
id?: string;
|
||
/** @example device_123 */
|
||
device_client_id?: string;
|
||
/** @example ios */
|
||
platform?: string;
|
||
/** @example app_v1 */
|
||
app_key?: string;
|
||
/** @example iPhone 12 */
|
||
device_model?: string;
|
||
/** @example push_token_here */
|
||
push_token?: string;
|
||
/** @example ws_session_123 */
|
||
websocket_session_id?: string;
|
||
/** @example 2023-11-15T07:30:00.000000Z */
|
||
last_seen_at?: string;
|
||
/** @example true */
|
||
is_online?: boolean;
|
||
/** @example device */
|
||
kind?: string;
|
||
/** @example 2 */
|
||
active_sessions_count?: number;
|
||
/** @example 2023-11-01T00:00:00.000000Z */
|
||
created_at?: string;
|
||
/** @example 2023-11-15T07:30:00.000000Z */
|
||
updated_at?: string;
|
||
}[];
|
||
pagination?: {
|
||
/** @example 1 */
|
||
current_page?: number;
|
||
/** @example 2 */
|
||
next_page?: number;
|
||
/** @example 20 */
|
||
page_size?: number;
|
||
/** @example null */
|
||
prev_page?: string;
|
||
/** @example 150 */
|
||
total_count?: number;
|
||
/** @example 8 */
|
||
total_pages?: number;
|
||
};
|
||
/** @example Devices retrieved successfully */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example Validation failed */
|
||
message?: string;
|
||
data?: {
|
||
/**
|
||
* @example [
|
||
* "The selected platform is invalid."
|
||
* ]
|
||
*/
|
||
platform?: string[];
|
||
/**
|
||
* @example [
|
||
* "The is_online field must be true or false."
|
||
* ]
|
||
*/
|
||
is_online?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
}
|
||
export type webhooks = Record<string, never>;
|
||
export interface components {
|
||
schemas: never;
|
||
responses: never;
|
||
parameters: never;
|
||
requestBodies: never;
|
||
headers: never;
|
||
pathItems: never;
|
||
}
|
||
export type $defs = Record<string, never>;
|
||
export interface operations {
|
||
Dimzou: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description 文章 UUID。
|
||
* @example 9f1c2d3e-4b5a-6789-0abc-def012345678
|
||
*/
|
||
article: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_article_preview */
|
||
kind?: string;
|
||
/** @example 空调多久洗一次?一篇讲清楚 */
|
||
title?: string;
|
||
/** @example 从健康与能耗角度给出清洗周期建议 */
|
||
summary?: string;
|
||
/** @example null */
|
||
cover_image?: string;
|
||
/** @example <h2>为什么要定期清洗</h2><p>……</p> */
|
||
html?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
/** @example 未认证 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
403: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example FORBIDDEN */
|
||
code?: string;
|
||
/** @example 无权限访问 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example NOT_FOUND */
|
||
code?: string;
|
||
/** @example 请求的资源未找到。 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
AgentToken: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example Authentication required */
|
||
message?: string;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
AgentToken: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example studio_agent_token_grant */
|
||
kind?: string;
|
||
/** @example Bearer */
|
||
token_type?: string;
|
||
/** @example 1296000 */
|
||
expires_in?: number;
|
||
/** @example eyJ0… */
|
||
access_token?: string;
|
||
/** @example def5… */
|
||
refresh_token?: string;
|
||
connect?: {
|
||
/** @example https://host/mcp/studio */
|
||
endpoint?: string;
|
||
/** @example Authorization: Bearer <access_token> */
|
||
header?: string;
|
||
};
|
||
};
|
||
/** @example Agent token 签发成功 */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
AgentToken: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/** @example architecto */
|
||
tokenId: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: never;
|
||
};
|
||
getCategoryTreeadmin: {
|
||
parameters: {
|
||
query?: {
|
||
/**
|
||
* @description Optional locale code (e.g., 'zh-hans', 'en'). Defaults to current application locale.
|
||
* @example sr_BA
|
||
*/
|
||
locale?: string;
|
||
/**
|
||
* @description Optional flag to include inactive categories. Defaults to false.
|
||
* @example false
|
||
*/
|
||
include_inactive?: boolean;
|
||
};
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"text/plain": string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
listPendingUserCreatedCategories: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example Authentication required */
|
||
message?: string;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
approveAPendingCategorymakeItPublic: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category.
|
||
* @example 2912b591-09f0-4c14-9190-866abd51cbee
|
||
*/
|
||
category_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: never;
|
||
};
|
||
rejectAPublicRequestkeepTheCategoryPrivate: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category.
|
||
* @example 2912b591-09f0-4c14-9190-866abd51cbee
|
||
*/
|
||
category_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: never;
|
||
};
|
||
mergeACategoryIntoAnotherpreservesBothIDs: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category.
|
||
* @example 2912b591-09f0-4c14-9190-866abd51cbee
|
||
*/
|
||
category_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description The surviving category UUID.
|
||
* @example architecto
|
||
*/
|
||
target_id: string;
|
||
};
|
||
};
|
||
};
|
||
responses: never;
|
||
};
|
||
createCategory: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description Optional UUID for the category. Auto-generated if not provided.
|
||
* @example architecto
|
||
*/
|
||
id?: string | null;
|
||
/**
|
||
* @description Optional UUID of parent category.
|
||
* @example architecto
|
||
*/
|
||
parent_id?: string | null;
|
||
/**
|
||
* @description Unique slug identifier for the category.
|
||
* @example architecto
|
||
*/
|
||
slug: string;
|
||
/**
|
||
* @description Optional sort order (default: 0).
|
||
* @example 16
|
||
*/
|
||
sort_order?: number;
|
||
/**
|
||
* @description Optional active status (default: true).
|
||
* @example false
|
||
*/
|
||
is_active?: boolean;
|
||
/**
|
||
* @description Optional Array of translations.
|
||
* @example [
|
||
* "architecto"
|
||
* ]
|
||
*/
|
||
translations?: (string | null)[];
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example category */
|
||
kind?: string;
|
||
/** @example uuid */
|
||
id?: string;
|
||
/** @example null */
|
||
parent_id?: string;
|
||
/** @example 1 */
|
||
level?: number;
|
||
/** @example new-category */
|
||
slug?: string;
|
||
/** @example 0 */
|
||
sort_order?: number;
|
||
/** @example true */
|
||
is_active?: boolean;
|
||
/** @example new-category */
|
||
name?: string;
|
||
/** @example null */
|
||
description?: string;
|
||
/** @example [] */
|
||
translations?: unknown[];
|
||
/** @example 2026-01-27T12:00:00.000000Z */
|
||
created_at?: string;
|
||
/** @example 2026-01-27T12:00:00.000000Z */
|
||
updated_at?: string;
|
||
};
|
||
/** @example Category created successfully */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example Validation failed */
|
||
message?: string;
|
||
/**
|
||
* @example [
|
||
* "Category slug must be unique"
|
||
* ]
|
||
*/
|
||
data?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
getCategoryDetails: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description UUID of the category.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"text/plain": string;
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example Category not found */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
updateCategory: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description UUID of the category.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description Optional UUID of parent category.
|
||
* @example architecto
|
||
*/
|
||
parent_id?: string | null;
|
||
/**
|
||
* @description Optional unique slug identifier.
|
||
* @example architecto
|
||
*/
|
||
slug?: string;
|
||
/**
|
||
* @description Optional sort order.
|
||
* @example 16
|
||
*/
|
||
sort_order?: number;
|
||
/**
|
||
* @description Optional active status.
|
||
* @example false
|
||
*/
|
||
is_active?: boolean;
|
||
/**
|
||
* @description Optional array of translations.
|
||
* @example [
|
||
* "architecto"
|
||
* ]
|
||
*/
|
||
translations?: string[];
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example category */
|
||
kind?: string;
|
||
/** @example uuid */
|
||
id?: string;
|
||
/** @example null */
|
||
parent_id?: string;
|
||
/** @example 1 */
|
||
level?: number;
|
||
/** @example updated-category */
|
||
slug?: string;
|
||
/** @example 更新的分类 */
|
||
name?: string;
|
||
/** @example 更新的描述 */
|
||
description?: string;
|
||
};
|
||
/** @example Category updated successfully */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example Validation failed */
|
||
message?: string;
|
||
/**
|
||
* @example [
|
||
* "Cannot set parent as it would create a circular reference"
|
||
* ]
|
||
*/
|
||
data?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
deleteCategory: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description UUID of the category.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/** @example Category deleted successfully */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example DELETE_FAILED */
|
||
code?: string;
|
||
/** @example Failed to delete category */
|
||
message?: string;
|
||
/** @example Cannot delete category with children */
|
||
data?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
listAllTranslationsForCategory: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category.
|
||
* @example 2912b591-09f0-4c14-9190-866abd51cbee
|
||
*/
|
||
category_id: string;
|
||
/**
|
||
* @description UUID of the category.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/**
|
||
* @example [
|
||
* {
|
||
* "id": "translation-uuid-1",
|
||
* "category_id": "category-uuid",
|
||
* "locale": "en",
|
||
* "name": "Home Services",
|
||
* "description": "Various home services"
|
||
* },
|
||
* {
|
||
* "id": "translation-uuid-2",
|
||
* "category_id": "category-uuid",
|
||
* "locale": "zh-hans",
|
||
* "name": "家庭服务",
|
||
* "description": "提供各种家庭服务"
|
||
* }
|
||
* ]
|
||
*/
|
||
data?: {
|
||
/** @example translation-uuid-1 */
|
||
id?: string;
|
||
/** @example category-uuid */
|
||
category_id?: string;
|
||
/** @example en */
|
||
locale?: string;
|
||
/** @example Home Services */
|
||
name?: string;
|
||
/** @example Various home services */
|
||
description?: string;
|
||
}[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
getTranslationForSpecificLocale: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category.
|
||
* @example 2912b591-09f0-4c14-9190-866abd51cbee
|
||
*/
|
||
category_id: string;
|
||
/**
|
||
* @description Locale code (e.g., 'en', 'zh-hans').
|
||
* @example sr_BA
|
||
*/
|
||
locale: string;
|
||
/**
|
||
* @description UUID of the category.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example translation-uuid */
|
||
id?: string;
|
||
/** @example category-uuid */
|
||
category_id?: string;
|
||
/** @example zh-hans */
|
||
locale?: string;
|
||
/** @example 家庭服务 */
|
||
name?: string;
|
||
/** @example 提供各种家庭服务 */
|
||
description?: string;
|
||
/** @example 2026-01-27T12:00:00.000000Z */
|
||
created_at?: string;
|
||
/** @example 2026-01-27T12:00:00.000000Z */
|
||
updated_at?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example TRANSLATION_NOT_FOUND */
|
||
code?: string;
|
||
/** @example Translation not found */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
createOrUpdateTranslationForSpecificLocale: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category.
|
||
* @example 2912b591-09f0-4c14-9190-866abd51cbee
|
||
*/
|
||
category_id: string;
|
||
/**
|
||
* @description Locale code (e.g., 'en', 'zh-hans').
|
||
* @example sr_BA
|
||
*/
|
||
locale: string;
|
||
/**
|
||
* @description UUID of the category.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description Translation name.
|
||
* @example architecto
|
||
*/
|
||
name: string;
|
||
/**
|
||
* @description Optional translation description.
|
||
* @example Eius et animi quos velit et.
|
||
*/
|
||
description?: string | null;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example translation-uuid */
|
||
id?: string;
|
||
/** @example category-uuid */
|
||
category_id?: string;
|
||
/** @example zh-hans */
|
||
locale?: string;
|
||
/** @example 家庭服务 */
|
||
name?: string;
|
||
/** @example 提供各种家庭服务 */
|
||
description?: string;
|
||
/** @example 2026-01-27T12:00:00.000000Z */
|
||
created_at?: string;
|
||
/** @example 2026-01-27T12:00:00.000000Z */
|
||
updated_at?: string;
|
||
};
|
||
/** @example Translation updated successfully */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example translation-uuid */
|
||
id?: string;
|
||
/** @example category-uuid */
|
||
category_id?: string;
|
||
/** @example zh-hans */
|
||
locale?: string;
|
||
/** @example 家庭服务 */
|
||
name?: string;
|
||
/** @example 提供各种家庭服务 */
|
||
description?: string;
|
||
};
|
||
/** @example Translation created successfully */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
deleteTranslationForSpecificLocale: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
/**
|
||
* @description The ID of the category.
|
||
* @example 2912b591-09f0-4c14-9190-866abd51cbee
|
||
*/
|
||
category_id: string;
|
||
/**
|
||
* @description Locale code (e.g., 'en', 'zh-hans').
|
||
* @example sr_BA
|
||
*/
|
||
locale: string;
|
||
/**
|
||
* @description UUID of the category.
|
||
* @example architecto
|
||
*/
|
||
id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/** @example Translation deleted successfully */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
404: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example TRANSLATION_NOT_FOUND */
|
||
code?: string;
|
||
/** @example Translation not found */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
APIOpenAPI: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example Authentication required */
|
||
message?: string;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
APIOpenAPI: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
401: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example Authentication required */
|
||
message?: string;
|
||
/** @example UNAUTHENTICATED */
|
||
code?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
SID: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description SID 值,格式为 3 位非歧义字母加 6 位数字,支持带/不带横杠。
|
||
* @example ABC-888888
|
||
*/
|
||
sid: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description success */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example ABC-888888 */
|
||
sid?: string;
|
||
/** @example true */
|
||
reserved?: boolean;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
SIDSID: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 用户 UID。
|
||
* @example 01HQ8M4Z2A3B5C6D7E8F9G0H1I2J3K4L
|
||
*/
|
||
user_uid: string;
|
||
/**
|
||
* @description SID 值,格式为 3 位非歧义字母加 6 位数字,支持带/不带横杠。
|
||
* @example ABC-168888
|
||
*/
|
||
sid: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description success */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example 01HQ8M4Z2A3B5C6D7E8F9G0H1I2J3K4L */
|
||
uid?: string;
|
||
/** @example ABC168888 */
|
||
sid?: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
OTP: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description Admin email or phone.
|
||
* @example [email protected]
|
||
*/
|
||
identity: string;
|
||
/**
|
||
* @description Identity type (email/phone).
|
||
* @example email
|
||
*/
|
||
type: string;
|
||
/**
|
||
* @description required_if:type,phone ISO 3166-1 alpha-3 country code.
|
||
* @example CHN
|
||
*/
|
||
country_code?: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description success */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
/** @example null */
|
||
data?: string;
|
||
meta?: {
|
||
/** @example 4 */
|
||
code_length?: number;
|
||
};
|
||
/** @example OTP sent successfully */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
/** @description validation_error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example Validation failed */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "Identity field is required"
|
||
* ]
|
||
*/
|
||
identity?: string[];
|
||
/**
|
||
* @example [
|
||
* "Type must be email or phone"
|
||
* ]
|
||
*/
|
||
type?: string[];
|
||
/**
|
||
* @example [
|
||
* "Country code is required for phone type"
|
||
* ]
|
||
*/
|
||
country_code?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
/** @description rate_limit */
|
||
429: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example TOO_MANY_REQUESTS */
|
||
code?: string;
|
||
/** @example Too many requests */
|
||
message?: string;
|
||
data?: {
|
||
/** @example 60 */
|
||
retry_after?: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
OTP: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description Admin email or phone.
|
||
* @example [email protected]
|
||
*/
|
||
identity: string;
|
||
/**
|
||
* @description Identity type (email/phone).
|
||
* @example email
|
||
*/
|
||
type: string;
|
||
/**
|
||
* @description OTP code.
|
||
* @example 1234
|
||
*/
|
||
code: string;
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description success */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6... */
|
||
access_token?: string;
|
||
/** @example Bearer */
|
||
token_type?: string;
|
||
/** @example 900 */
|
||
expires_in?: number;
|
||
/** @example refresh-token-string */
|
||
refresh_token?: string;
|
||
};
|
||
/** @example Admin login successful */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
/** @description invalid_otp */
|
||
400: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example INVALID_OTP */
|
||
code?: string;
|
||
/** @example Invalid or expired OTP code */
|
||
message?: string;
|
||
};
|
||
};
|
||
};
|
||
/** @description validation_error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example false */
|
||
success?: boolean;
|
||
/** @example VALIDATION_ERROR */
|
||
code?: string;
|
||
/** @example Validation failed */
|
||
message?: string;
|
||
data?: {
|
||
errors?: {
|
||
/**
|
||
* @example [
|
||
* "OTP code is required"
|
||
* ]
|
||
*/
|
||
code?: string[];
|
||
/**
|
||
* @example [
|
||
* "Type must be email or phone"
|
||
* ]
|
||
*/
|
||
type?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
getTheCurrentAdminUserWithRolesAndPermissions: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
/** @example true */
|
||
success?: boolean;
|
||
data?: {
|
||
/** @example user */
|
||
kind?: string;
|
||
/** @example 01J... */
|
||
uid?: string;
|
||
/** @example Admin */
|
||
display_name?: string;
|
||
/** @example active */
|
||
status?: string;
|
||
};
|
||
meta?: {
|
||
/**
|
||
* @example [
|
||
* "admin"
|
||
* ]
|
||
*/
|
||
roles?: string[];
|
||
/**
|
||
* @example [
|
||
* "admin:category:read",
|
||
* "admin:category:approve"
|
||
* ]
|
||
*/
|
||
permissions?: string[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
}
|