From 9468e60ee062fc03368f3066b5edfdc28d6d6cc3 Mon Sep 17 00:00:00 2001 From: Jeongho Nam Date: Fri, 5 Jul 2024 00:34:16 +0900 Subject: [PATCH] Add example files --- deploy/examples.ts | 25 + examples/keyword/bbs.json | 2060 ++ examples/keyword/clickhouse.json | 991 + examples/keyword/fireblocks.json | 16029 ++++++++ examples/keyword/iamport.json | 6803 ++++ examples/keyword/petstore.json | 1287 + examples/keyword/shopping.json | 50964 ++++++++++++++++++++++++++ examples/keyword/toss.json | 10748 ++++++ examples/keyword/uber.json | 219 + examples/positional/bbs.json | 1990 + examples/positional/clickhouse.json | 851 + examples/positional/fireblocks.json | 15394 ++++++++ examples/positional/iamport.json | 6708 ++++ examples/positional/petstore.json | 1197 + examples/positional/shopping.json | 50269 +++++++++++++++++++++++++ examples/positional/toss.json | 10688 ++++++ examples/positional/uber.json | 194 + examples/swagger/bbs.json | 1666 + examples/swagger/clickhouse.json | 2581 ++ examples/swagger/fireblocks.json | 13598 +++++++ examples/swagger/iamport.json | 4535 +++ examples/swagger/petstore.json | 1225 + examples/swagger/shopping.json | 17538 +++++++++ examples/swagger/toss.json | 3471 ++ examples/swagger/uber.json | 370 + package.json | 5 +- 26 files changed, 221405 insertions(+), 1 deletion(-) create mode 100644 deploy/examples.ts create mode 100644 examples/keyword/bbs.json create mode 100644 examples/keyword/clickhouse.json create mode 100644 examples/keyword/fireblocks.json create mode 100644 examples/keyword/iamport.json create mode 100644 examples/keyword/petstore.json create mode 100644 examples/keyword/shopping.json create mode 100644 examples/keyword/toss.json create mode 100644 examples/keyword/uber.json create mode 100644 examples/positional/bbs.json create mode 100644 examples/positional/clickhouse.json create mode 100644 examples/positional/fireblocks.json create mode 100644 examples/positional/iamport.json create mode 100644 examples/positional/petstore.json create mode 100644 examples/positional/shopping.json create mode 100644 examples/positional/toss.json create mode 100644 examples/positional/uber.json create mode 100644 examples/swagger/bbs.json create mode 100644 examples/swagger/clickhouse.json create mode 100644 examples/swagger/fireblocks.json create mode 100644 examples/swagger/iamport.json create mode 100644 examples/swagger/petstore.json create mode 100644 examples/swagger/shopping.json create mode 100644 examples/swagger/toss.json create mode 100644 examples/swagger/uber.json diff --git a/deploy/examples.ts b/deploy/examples.ts new file mode 100644 index 0000000..80e3a45 --- /dev/null +++ b/deploy/examples.ts @@ -0,0 +1,25 @@ +import fs from "fs"; + +import { IOpenAiDocument, OpenAiComposer } from "../src"; + +const PATH = `${__dirname}/../examples`; + +const main = async (): Promise => { + const fileList: string[] = await fs.promises.readdir(`${PATH}/swagger`); + for (const file of fileList) { + const swagger: any = JSON.parse( + await fs.promises.readFile(`${PATH}/swagger/${file}`, "utf8"), + ); + for (const keyword of [true, false]) { + const document: IOpenAiDocument = OpenAiComposer.document({ + swagger, + options: { keyword }, + }); + await fs.promises.writeFile( + `${PATH}/${keyword ? "keyword" : "positional"}/${file}`, + JSON.stringify(document, null, 2), + ); + } + } +}; +main().catch(console.error); diff --git a/examples/keyword/bbs.json b/examples/keyword/bbs.json new file mode 100644 index 0000000..acb14a8 --- /dev/null +++ b/examples/keyword/bbs.json @@ -0,0 +1,2060 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "post", + "path": "/bbs/articles", + "name": "bbs_articles_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "writer": { + "type": "string" + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "password": { + "type": "string", + "title": "Password for modification", + "description": "Password for modification." + } + }, + "required": [ + "writer", + "format", + "title", + "body", + "files", + "password" + ], + "description": "Store content type of the article." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "writer": { + "type": "string", + "title": "Writer of article", + "description": "Writer of article." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files", + "title" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "id", + "writer", + "snapshots", + "created_at" + ], + "description": "Article entity.\n\n`IBbsArticle* is a super-type entity of all kinds of articles in the current\nbackend system, literally shaping individual articles of the bulletin board.\n\nAnd, as you can see, the elements that must inevitably exist in the article,\nsuch as the `title` or the `body`, do not exist in the `IBbsArticle`, but exist\nin the subsidiary entity, {@link IBbsArticle.ISnapshot }, as a 1: N relationship,\nwhich is because a new snapshot record is published every time the article is\nmodified.\n\nThe reason why a new snapshot record is published every time the article is\nmodified is to preserve the evidence. Due to the nature of e-community, there\nis always a threat of dispute among the participants. And it can happen that\ndisputes arise through articles or {@link IBbsArticleComment comments}, and to\nprevent such things as modifying existing articles to manipulate the situation,\nthe article is designed in this structure.\n\nIn other words, to keep evidence, and prevent fraud." + }, + "description": "Create a new article.\n\nCreate a new article with its first {@link IBbsArticle.ISnapshot snapshot}." + }, + { + "method": "patch", + "path": "/bbs/articles", + "name": "bbs_articles_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "writer": { + "type": "string" + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + }, + "description": "검색 정보." + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-writer", + "-title", + "-created_at", + "-updated_at", + "+writer", + "+title", + "+created_at", + "+updated_at" + ] + }, + "title": "Sort condition", + "description": "Sort condition." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "writer": { + "type": "string", + "title": "Writer of the article", + "description": "Writer of the article." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "id", + "writer", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the article." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up all summarized articles.\n\nList up all summarized articles with pagination and searching options." + }, + { + "method": "patch", + "path": "/bbs/articles/abridges", + "name": "bbs_articles_abridges_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "writer": { + "type": "string" + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + }, + "description": "검색 정보." + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-writer", + "-title", + "-created_at", + "-updated_at", + "+writer", + "+title", + "+created_at", + "+updated_at" + ] + }, + "title": "Sort condition", + "description": "Sort condition." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "writer": { + "type": "string", + "title": "Writer of the article", + "description": "Writer of the article." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "writer", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abriged information of the article." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up all abridged articles.\n\nList up all abridged articles with pagination and searching options." + }, + { + "method": "get", + "path": "/bbs/articles/{id}", + "name": "bbs_articles_getById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target article's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "writer": { + "type": "string", + "title": "Writer of article", + "description": "Writer of article." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files", + "title" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "id", + "writer", + "snapshots", + "created_at" + ], + "description": "Article entity.\n\n`IBbsArticle* is a super-type entity of all kinds of articles in the current\nbackend system, literally shaping individual articles of the bulletin board.\n\nAnd, as you can see, the elements that must inevitably exist in the article,\nsuch as the `title` or the `body`, do not exist in the `IBbsArticle`, but exist\nin the subsidiary entity, {@link IBbsArticle.ISnapshot }, as a 1: N relationship,\nwhich is because a new snapshot record is published every time the article is\nmodified.\n\nThe reason why a new snapshot record is published every time the article is\nmodified is to preserve the evidence. Due to the nature of e-community, there\nis always a threat of dispute among the participants. And it can happen that\ndisputes arise through articles or {@link IBbsArticleComment comments}, and to\nprevent such things as modifying existing articles to manipulate the situation,\nthe article is designed in this structure.\n\nIn other words, to keep evidence, and prevent fraud." + }, + "description": "Read individual article.\n\nReads an article with its every {@link IBbsArticle.ISnapshot snapshots}." + }, + { + "method": "put", + "path": "/bbs/articles/{id}", + "name": "bbs_articles_putById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target article's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "password": { + "type": "string", + "title": "Password for modification", + "description": "Password for modification." + } + }, + "required": [ + "format", + "title", + "body", + "files", + "password" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files", + "title" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "description": "Update an article.\n\nAccumulate a new {@link IBbsArticle.ISnapshot snapshot} record to the article." + }, + { + "method": "delete", + "path": "/bbs/articles/{id}", + "name": "bbs_articles_eraseById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target article's " + }, + "body": { + "type": "object", + "properties": { + "password": { + "type": "string" + } + }, + "required": [ + "password" + ] + } + } + } + ], + "description": "Erase an article.\n\nPerforms soft deletion to the article." + }, + { + "method": "post", + "path": "/bbs/articles/{articleId}/comments", + "name": "bbs_articles_comments_postByArticleid", + "parameters": [ + { + "type": "object", + "properties": { + "articleId": { + "type": "string", + "format": "uuid", + "description": "Belonged article's " + }, + "body": { + "type": "object", + "properties": { + "writer": { + "type": "string", + "title": "Writer of comment", + "description": "Writer of comment." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "password": { + "type": "string", + "title": "Password for modification", + "description": "Password for modification." + } + }, + "required": [ + "writer", + "format", + "body", + "files", + "password" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "writer": { + "type": "string", + "title": "Writer of comment", + "description": "Writer of comment." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "id", + "parent_id", + "writer", + "snapshots", + "created_at" + ], + "description": "Comment written on an article.\n\n`IBbsArticleComment` is an entity that shapes the comments written on an article.\n\nAnd for this comment, as in the previous relationship between\n{@link IBbsArticle } and {@link IBbsArticle.ISnapshot }, the content body of the\ncomment is stored in the sub {@link IBbsArticleComment.ISnapshot } table for\nevidentialism, and a new snapshot record is issued every time the comment is modified.\n\nAlso, `IBbsArticleComment` is expressing the relationship of the hierarchical reply\nstructure through the {@link IBbsArticleComment.parent_id } attribute." + }, + "description": "Create a new comment.\n\nCreate a new comment with its first {@link IBbsArticleComment.ISnapshot snapshot}." + }, + { + "method": "patch", + "path": "/bbs/articles/{articleId}/comments", + "name": "bbs_articles_comments_patchByArticleid", + "parameters": [ + { + "type": "object", + "properties": { + "articleId": { + "type": "string", + "format": "uuid", + "description": "" + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "writer": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-writer", + "-created_at", + "+writer", + "+created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "writer": { + "type": "string", + "title": "Writer of comment", + "description": "Writer of comment." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "id", + "parent_id", + "writer", + "snapshots", + "created_at" + ], + "description": "Comment written on an article.\n\n`IBbsArticleComment` is an entity that shapes the comments written on an article.\n\nAnd for this comment, as in the previous relationship between\n{@link IBbsArticle } and {@link IBbsArticle.ISnapshot }, the content body of the\ncomment is stored in the sub {@link IBbsArticleComment.ISnapshot } table for\nevidentialism, and a new snapshot record is issued every time the comment is modified.\n\nAlso, `IBbsArticleComment` is expressing the relationship of the hierarchical reply\nstructure through the {@link IBbsArticleComment.parent_id } attribute." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up all summarized comments.\n\nList up all summarized comments with pagination and searching options." + }, + { + "method": "get", + "path": "/bbs/articles/{articleId}/comments/{id}", + "name": "bbs_articles_comments_getByArticleidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "articleId": { + "type": "string", + "format": "uuid", + "description": "Belonged article's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target comment's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "writer": { + "type": "string", + "title": "Writer of comment", + "description": "Writer of comment." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "id", + "parent_id", + "writer", + "snapshots", + "created_at" + ], + "description": "Comment written on an article.\n\n`IBbsArticleComment` is an entity that shapes the comments written on an article.\n\nAnd for this comment, as in the previous relationship between\n{@link IBbsArticle } and {@link IBbsArticle.ISnapshot }, the content body of the\ncomment is stored in the sub {@link IBbsArticleComment.ISnapshot } table for\nevidentialism, and a new snapshot record is issued every time the comment is modified.\n\nAlso, `IBbsArticleComment` is expressing the relationship of the hierarchical reply\nstructure through the {@link IBbsArticleComment.parent_id } attribute." + }, + "description": "Read individual comment.\n\nReads a comment with its every {@link IBbsArticleComment.ISnapshot snapshots}." + }, + { + "method": "put", + "path": "/bbs/articles/{articleId}/comments/{id}", + "name": "bbs_articles_comments_putByArticleidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "articleId": { + "type": "string", + "format": "uuid", + "description": "Belonged article's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target comment's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "password": { + "type": "string", + "title": "Password for modification", + "description": "Password for modification." + } + }, + "required": [ + "format", + "body", + "files", + "password" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "description": "Update a comment.\n\nAccumulate a new {@link IBbsArticleComment.ISnapshot snapshot} record to the comment." + }, + { + "method": "delete", + "path": "/bbs/articles/{articleId}/comments/{id}", + "name": "bbs_articles_comments_eraseByArticleidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "articleId": { + "type": "string", + "format": "uuid", + "description": "Belonged article's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target comment's " + }, + "body": { + "type": "object", + "properties": { + "password": { + "type": "string" + } + }, + "required": [ + "password" + ] + } + } + } + ], + "description": "Erase a comment.\n\nPerforms soft deletion to the comment." + }, + { + "method": "get", + "path": "/monitors/health", + "name": "monitors_health_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "description": "Health check API." + }, + { + "method": "get", + "path": "/monitors/performance", + "name": "monitors_performance_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "properties": { + "cpu": { + "type": "object", + "properties": { + "user": { + "type": "number" + }, + "system": { + "type": "number" + } + }, + "required": [ + "user", + "system" + ] + }, + "memory": { + "type": "object", + "properties": { + "rss": { + "type": "number" + }, + "heapTotal": { + "type": "number" + }, + "heapUsed": { + "type": "number" + }, + "external": { + "type": "number" + }, + "arrayBuffers": { + "type": "number" + } + }, + "required": [ + "rss", + "heapTotal", + "heapUsed", + "external", + "arrayBuffers" + ] + }, + "resource": { + "type": "object", + "properties": { + "fsRead": { + "type": "number" + }, + "fsWrite": { + "type": "number" + }, + "involuntaryContextSwitches": { + "type": "number" + }, + "ipcReceived": { + "type": "number" + }, + "ipcSent": { + "type": "number" + }, + "majorPageFault": { + "type": "number" + }, + "maxRSS": { + "type": "number" + }, + "minorPageFault": { + "type": "number" + }, + "sharedMemorySize": { + "type": "number" + }, + "signalsCount": { + "type": "number" + }, + "swappedOut": { + "type": "number" + }, + "systemCPUTime": { + "type": "number" + }, + "unsharedDataSize": { + "type": "number" + }, + "unsharedStackSize": { + "type": "number" + }, + "userCPUTime": { + "type": "number" + }, + "voluntaryContextSwitches": { + "type": "number" + } + }, + "required": [ + "fsRead", + "fsWrite", + "involuntaryContextSwitches", + "ipcReceived", + "ipcSent", + "majorPageFault", + "maxRSS", + "minorPageFault", + "sharedMemorySize", + "signalsCount", + "swappedOut", + "systemCPUTime", + "unsharedDataSize", + "unsharedStackSize", + "userCPUTime", + "voluntaryContextSwitches" + ] + } + }, + "required": [ + "cpu", + "memory", + "resource" + ] + }, + "description": "Get performance information.\n\nGet perofmration information composed with CPU, memory and resource usage." + }, + { + "method": "get", + "path": "/monitors/system", + "name": "monitors_system_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "properties": { + "uid": { + "type": "number", + "title": "Random Unique ID", + "description": "Random Unique ID." + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "`process.argv`" + }, + "commit": { + "type": "object", + "properties": { + "shortHash": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "hash": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "sanitizedSubject": { + "type": "string" + }, + "body": { + "type": "string" + }, + "author": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "description": "Git user account info." + }, + "committer": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "description": "Git user account info." + }, + "authored_at": { + "type": "string" + }, + "commited_at": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shortHash", + "branch", + "hash", + "subject", + "sanitizedSubject", + "body", + "author", + "committer", + "authored_at", + "commited_at", + "tags" + ], + "description": "Git commit info." + }, + "package": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "description": { + "type": "string" + }, + "main": { + "type": "string" + }, + "typings": { + "type": "string" + }, + "scripts": { + "type": "object", + "properties": {}, + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } + }, + "repository": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "git" + ] + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ] + }, + "author": { + "type": "string" + }, + "license": { + "type": "string" + }, + "bugs": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + }, + "required": [ + "url" + ] + }, + "homepage": { + "type": "string" + }, + "devDependencies": { + "type": "object", + "properties": {}, + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } + }, + "dependencies": { + "type": "object", + "properties": {}, + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } + }, + "publishConfig": { + "type": "object", + "properties": { + "registry": { + "type": "string" + } + }, + "required": [ + "registry" + ] + }, + "files": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "version", + "description", + "scripts", + "repository", + "author", + "license", + "bugs", + "homepage", + "dependencies" + ], + "description": "NPM package info." + }, + "created_at": { + "type": "string", + "title": "Creation time of this server", + "description": "Creation time of this server." + } + }, + "required": [ + "uid", + "arguments", + "commit", + "package", + "created_at" + ], + "description": "System Information." + }, + "description": "Get system information.\n\nGet system information with commit and package information." + } + ], + "errors": [], + "options": { + "keyword": true, + "separate": null + } +} \ No newline at end of file diff --git a/examples/keyword/clickhouse.json b/examples/keyword/clickhouse.json new file mode 100644 index 0000000..e3689f9 --- /dev/null +++ b/examples/keyword/clickhouse.json @@ -0,0 +1,991 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "get", + "path": "/v1/organizations", + "name": "v1_organizations_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get list of available organizations.\n\nReturns a list with a single organization associated with the API key in the request." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId", + "name": "v1_organizations_getByOrganizationid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get organization details.\n\nReturns details of a single organization. In order to get the details, the auth key must belong to the organization." + }, + { + "method": "patch", + "path": "/v1/organizations/:organizationId", + "name": "v1_organizations_patchByOrganizationid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization to update." + }, + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Update organization details.\n\nUpdates organization fields. Requires ADMIN auth key role." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/services", + "name": "v1_organizations_services_getByOrganizationid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "List of organization services.\n\nReturns a list of all services in the organization." + }, + { + "method": "post", + "path": "/v1/organizations/:organizationId/services", + "name": "v1_organizations_services_postByOrganizationid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization that will own the service." + }, + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Create new service.\n\nCreates a new service in the organization, and returns the current service state and a password to access the service. The service is started asynchronously." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/services/:serviceId", + "name": "v1_organizations_services_getByOrganizationidAndServiceid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the service." + }, + "serviceId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested service." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get service details.\n\nReturns a service that belongs to the organization" + }, + { + "method": "patch", + "path": "/v1/organizations/:organizationId/services/:serviceId", + "name": "v1_organizations_services_patchByOrganizationidAndServiceid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the service." + }, + "serviceId": { + "type": "string", + "format": "uuid", + "description": "ID of the service to update." + }, + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Update service basic details.\n\nUpdates basic service details like service name or IP access list." + }, + { + "method": "delete", + "path": "/v1/organizations/:organizationId/services/:serviceId", + "name": "v1_organizations_services_eraseByOrganizationidAndServiceid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the service." + }, + "serviceId": { + "type": "string", + "format": "uuid", + "description": "ID of the service to delete." + } + } + } + ], + "description": "Delete service.\n\nDeletes the service. The service must be in stopped state and is deleted asynchronously after this method call." + }, + { + "method": "patch", + "path": "/v1/organizations/:organizationId/services/:serviceId/state", + "name": "v1_organizations_services_state_patchByOrganizationidAndServiceid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the service." + }, + "serviceId": { + "type": "string", + "format": "uuid", + "description": "ID of the service to update state." + }, + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Update service state.\n\nStarts or stop service" + }, + { + "method": "patch", + "path": "/v1/organizations/:organizationId/services/:serviceId/scaling", + "name": "v1_organizations_services_scaling_patchByOrganizationidAndServiceid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the service." + }, + "serviceId": { + "type": "string", + "format": "uuid", + "description": "ID of the service to update scaling parameters." + }, + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Update service auto scaling settings.\n\nUpdates minimum and maximum total memory limits and idle mode scaling behavior for the service. The memory settings are available only for \"production\" services and must be a multiple of 12 starting from 24GB." + }, + { + "method": "patch", + "path": "/v1/organizations/:organizationId/services/:serviceId/password", + "name": "v1_organizations_services_password_patchByOrganizationidAndServiceid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the service." + }, + "serviceId": { + "type": "string", + "format": "uuid", + "description": "ID of the service to update password." + }, + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Update service password.\n\nSets a new password for the service" + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/services/:serviceId/backups", + "name": "v1_organizations_services_backups_getByOrganizationidAndServiceid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the backup." + }, + "serviceId": { + "type": "string", + "format": "uuid", + "description": "ID of the service the backup was created from." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "List of service backups.\n\nReturns a list of all backups for the service." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/services/:serviceId/backups/:backupId", + "name": "v1_organizations_services_backups_getByOrganizationidAndServiceidAndBackupid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the backup." + }, + "serviceId": { + "type": "string", + "format": "uuid", + "description": "ID of the service the backup was created from." + }, + "backupId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested backup." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get backup details.\n\nReturns a single backup info." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/keys", + "name": "v1_organizations_keys_getByOrganizationid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get list of all keys.\n\nReturns a list of all keys in the organization." + }, + { + "method": "post", + "path": "/v1/organizations/:organizationId/keys", + "name": "v1_organizations_keys_postByOrganizationid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization that will own the key." + }, + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Create key.\n\nCreates new API key." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/keys/:keyId", + "name": "v1_organizations_keys_getByOrganizationidAndKeyid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + }, + "keyId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested key." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get key details.\n\nReturns a single key details." + }, + { + "method": "patch", + "path": "/v1/organizations/:organizationId/keys/:keyId", + "name": "v1_organizations_keys_patchByOrganizationidAndKeyid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the key." + }, + "keyId": { + "type": "string", + "format": "uuid", + "description": "ID of the key to update." + }, + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Update key.\n\nUpdates API key properties." + }, + { + "method": "delete", + "path": "/v1/organizations/:organizationId/keys/:keyId", + "name": "v1_organizations_keys_eraseByOrganizationidAndKeyid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the key." + }, + "keyId": { + "type": "string", + "format": "uuid", + "description": "ID of the key to delete." + } + } + } + ], + "description": "Delete key.\n\nDeletes API key. Only a key not used to authenticate the active request can be deleted." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/members", + "name": "v1_organizations_members_getByOrganizationid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "List organization members.\n\nReturns a list of all members in the organization." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/members/:userId", + "name": "v1_organizations_members_getByOrganizationidAndUserid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization the member is part of." + }, + "userId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested user." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get member details.\n\nReturns a single organization member details." + }, + { + "method": "patch", + "path": "/v1/organizations/:organizationId/members/:userId", + "name": "v1_organizations_members_patchByOrganizationidAndUserid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization the member is part of." + }, + "userId": { + "type": "string", + "format": "uuid", + "description": "ID of the user to patch" + }, + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Update organization member.\n\nUpdates organization member role." + }, + { + "method": "delete", + "path": "/v1/organizations/:organizationId/members/:userId", + "name": "v1_organizations_members_eraseByOrganizationidAndUserid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + }, + "userId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested user." + } + } + } + ], + "description": "Remove an organization member.\n\nRemoves a user from the organization" + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/invitations", + "name": "v1_organizations_invitations_getByOrganizationid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "List all invitations.\n\nReturns list of all organization invitations." + }, + { + "method": "post", + "path": "/v1/organizations/:organizationId/invitations", + "name": "v1_organizations_invitations_postByOrganizationid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization to invite a user to." + }, + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Create an invitation.\n\nCreates organization invitation." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/invitations/:invitationId", + "name": "v1_organizations_invitations_getByOrganizationidAndInvitationid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + }, + "invitationId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get invitation details.\n\nReturns details for a single organization invitation." + }, + { + "method": "delete", + "path": "/v1/organizations/:organizationId/invitations/:invitationId", + "name": "v1_organizations_invitations_eraseByOrganizationidAndInvitationid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the organization that has the invitation." + }, + "invitationId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + } + } + ], + "description": "Delete organization invitation.\n\nDeletes a single organization invitation." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/activities", + "name": "v1_organizations_activities_getByOrganizationid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "List of organization activities.\n\nReturns a list of all organization activities." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/activities/:activityId", + "name": "v1_organizations_activities_getByOrganizationidAndActivityid", + "parameters": [ + { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + }, + "activityId": { + "type": "string", + "description": "ID of the requested activity." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Organization activity.\n\nReturns a single organization activity by ID." + } + ], + "errors": [], + "options": { + "keyword": true, + "separate": null + } +} \ No newline at end of file diff --git a/examples/keyword/fireblocks.json b/examples/keyword/fireblocks.json new file mode 100644 index 0000000..98e5300 --- /dev/null +++ b/examples/keyword/fireblocks.json @@ -0,0 +1,16029 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "get", + "path": "/vault/accounts", + "name": "vault_accounts_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "namePrefix": { + "type": "string" + }, + "nameSuffix": { + "type": "string" + }, + "minAmountThreshold": { + "type": "number" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset" + } + }, + "required": [] + } + } + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + } + }, + "hiddenOnUI": { + "type": "boolean" + }, + "customerRefId": { + "type": "string" + }, + "autoFuel": { + "type": "boolean" + } + } + } + }, + "description": "List vault accounts.\n\nGets all vault accounts in your workspace." + }, + { + "method": "post", + "path": "/vault/accounts", + "name": "vault_accounts_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + } + }, + "hiddenOnUI": { + "type": "boolean" + }, + "customerRefId": { + "type": "string" + }, + "autoFuel": { + "type": "boolean" + } + } + }, + "description": "Create a new vault account.\n\nCreates a new vault account with the requested name." + }, + { + "method": "get", + "path": "/vault/accounts_paged", + "name": "vault_accounts_paged_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "namePrefix": { + "type": "string" + }, + "nameSuffix": { + "type": "string" + }, + "minAmountThreshold": { + "type": "number" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset" + }, + "before": { + "type": "string" + }, + "after": { + "type": "string" + }, + "limit": { + "type": "number", + "minimum": 1, + "maximum": 500, + "default": 200 + } + }, + "required": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "accounts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + } + }, + "hiddenOnUI": { + "type": "boolean" + }, + "customerRefId": { + "type": "string" + }, + "autoFuel": { + "type": "boolean" + } + } + } + }, + "paging": { + "type": "object", + "properties": { + "before": { + "type": "string" + }, + "after": { + "type": "string" + } + } + }, + "previousUrl": { + "type": "string" + }, + "nextUrl": { + "type": "string" + } + } + }, + "description": "List vault acounts (Paginated).\n\nGets all vault accounts in your workspace. This endpoint returns a limited amount of results with a quick response time." + }, + { + "method": "get", + "path": "/vault/accounts/{vaultAccountId}", + "name": "vault_accounts_getByVaultaccountid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to return type: string" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + } + }, + "hiddenOnUI": { + "type": "boolean" + }, + "customerRefId": { + "type": "string" + }, + "autoFuel": { + "type": "boolean" + } + } + }, + "description": "Find a vault account by ID.\n\nReturns the requested vault account." + }, + { + "method": "put", + "path": "/vault/accounts/{vaultAccountId}", + "name": "vault_accounts_putByVaultaccountid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to edit" + }, + "body": {} + } + } + ], + "description": "Rename a vault account.\n\nRenames the requested vault account." + }, + { + "method": "get", + "path": "/vault/asset_wallets", + "name": "vault_asset_wallets_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "totalAmountLargerThan": { + "type": "number", + "description": "When specified, only asset wallets with total balance larger than this amount are returned." + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "When specified, only asset wallets cross vault accounts that have this asset ID are returned." + }, + "before": { + "type": "string", + "description": "Fetches the next paginated response before this element. This element is a cursor and is returned at the response of the previous page." + }, + "after": { + "type": "string", + "description": "Fetches the next paginated response after this element. This element is a cursor and is returned at the response of the previous page." + }, + "limit": { + "type": "number", + "minimum": 1, + "maximum": 1000, + "default": 200, + "description": "The maximum number of asset wallets in a single response. The default is 200 and the maximum is 1000." + } + }, + "required": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "assetWallets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "vaultId": { + "description": "ID of the vault account. You can [get the vault account by this ID](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid) to retrieve vault properties such as its name, auto fueling, hidden on UI or customer reference ID.", + "type": "string" + }, + "assetId": { + "description": "ID of the asset. You can get more information about this asset by using the [supported assets API](https://developers.fireblocks.com/reference/get_supported-assets)", + "type": "string" + }, + "available": { + "description": "Available balance, available to use in a transaction.", + "type": "string" + }, + "total": { + "description": "Total balance at the asset wallet, as seen at the blockchain explorers. This includes balance available, and any kind of unavailable balance such as locked, frozen, or others.", + "type": "string" + }, + "pending": { + "description": "Pending balance.", + "type": "string" + }, + "staked": { + "description": "Staked balance.", + "type": "string" + }, + "frozen": { + "description": "Funds frozen due to the anti-money laundering policy at this workspace.", + "type": "string" + }, + "lockedAmount": { + "description": "Locked balance.", + "type": "string" + }, + "blockHeight": { + "description": "The height (number) of the block of the balance. Can by empty.", + "type": "string" + }, + "blockHash": { + "description": "The hash of the block of the balance. Can by empty.", + "type": "string" + }, + "creationTimestamp": { + "description": "Unix timestamp of the time the asset wallet was created.", + "type": "string" + } + } + } + }, + "paging": { + "type": "object", + "properties": { + "before": { + "description": "A string representing a cursor. Users can use this with a new request to this API endpoint as the “before” request parameter to fetch the previous page of results.", + "type": "string" + }, + "after": { + "description": "A string representing a cursor. Users can use this with a new request to this API endpoint as the “before” request parameter to fetch the next page of results.", + "type": "string" + } + } + } + } + }, + "description": "List asset wallets (Paginated).\n\nGets all asset wallets at all of the vault accounts in your workspace. An asset wallet is an asset at a vault account. This method allows fast traversal of all account balances.\n**Note:**\n - This API endpoint is in limited availability and available for selected customers. If you would like to get early access to this endpoint, please reach out to [Fireblocks Support](https://support.fireblocks.io/hc/en-us/requests/new?ticket_form_id=36000337220)\n - This API call is subject to [rate limits](https://developers.fireblocks.com/reference/rate-limiting).\n" + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/hide", + "name": "vault_accounts_hide_postByVaultaccountid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "minimum": 1, + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The vault account to hide" + } + } + } + ], + "description": "Hide a vault account in the console.\n\nHides the requested vault account from the web console view." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/unhide", + "name": "vault_accounts_unhide_postByVaultaccountid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "minimum": 1, + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The vault account to unhide" + } + } + } + ], + "description": "Unhide a vault account in the console.\n\nMakes a hidden vault account visible in web console view." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/activate", + "name": "vault_accounts_activate_postByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to return, or 'default' for the default vault account" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "address": { + "type": "string" + }, + "legacyAddress": { + "type": "string" + }, + "enterpriseAddress": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "eosAccountName": { + "type": "string" + }, + "status": { + "type": "string" + }, + "activationTxId": { + "type": "string" + } + } + }, + "description": "Activate a wallet in a vault account.\n\nInitiates activation for a wallet in a vault account." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/set_customer_ref_id", + "name": "vault_accounts_set_customer_ref_id_postByVaultaccountid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "minimum": 1, + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The vault account ID" + }, + "body": {} + } + } + ], + "description": "Set an AML/KYT customer reference ID for a vault account.\n\nAssigns an AML/KYT customer reference ID for the vault account." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/set_auto_fuel", + "name": "vault_accounts_set_auto_fuel_postByVaultaccountid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "minimum": 1, + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The vault account ID" + }, + "body": {} + } + } + ], + "description": "Turn autofueling on or off.\n\nSets the autofueling property of the vault account to enabled or disabled." + }, + { + "method": "get", + "path": "/vault/accounts/{vaultAccountId}/{assetId}", + "name": "vault_accounts_getByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to return" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + }, + "description": "Get the asset balance for a vault account.\n\nReturns a wallet for a specific asset of a vault account." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/{assetId}", + "name": "vault_accounts_postByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to return, or 'default' for the default vault account" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "address": { + "type": "string" + }, + "legacyAddress": { + "type": "string" + }, + "enterpriseAddress": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "eosAccountName": { + "type": "string" + }, + "status": { + "type": "string" + }, + "activationTxId": { + "type": "string" + } + } + }, + "description": "Create a new wallet.\n\nCreates a wallet for a specific asset in a vault account." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/balance", + "name": "vault_accounts_balance_postByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to return" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + "body": { + "type": "object" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + }, + "description": "Refresh asset balance data.\n\nUpdates the balance of a specific asset in a vault account." + }, + { + "method": "get", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/addresses", + "name": "vault_accounts_addresses_getByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to return" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + } + } + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "assetId": { + "type": "string", + "x-fb-entity": "asset" + }, + "address": { + "type": "string" + }, + "description": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "addressFormat": { + "type": "string", + "enum": [ + "SEGWIT", + "LEGACY" + ] + }, + "legacyAddress": { + "type": "string" + }, + "enterpriseAddress": { + "type": "string" + }, + "bip44AddressIndex": { + "type": "integer" + }, + "userDefined": { + "type": "boolean" + } + } + } + }, + "description": "Get asset addresses.\n\nLists all addresses for specific asset of vault account." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/addresses", + "name": "vault_accounts_addresses_postByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to return" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "legacyAddress": { + "type": "string" + }, + "enterpriseAddress": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "bip44AddressIndex": { + "type": "integer" + } + } + }, + "description": "Create new asset deposit address.\n\nCreates a new deposit address for an asset of a vault account." + }, + { + "method": "get", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/max_spendable_amount", + "name": "vault_accounts_max_spendable_amount_getByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account, or 'default' for the default vault account" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + "query": { + "type": "object", + "properties": { + "manualSignging": { + "type": "boolean", + "description": "False by default. The maximum number of inputs depends if the transaction will be signed by an automated co-signer server or on a mobile device." + } + }, + "required": [] + } + } + } + ], + "description": "Get the maximum spendable amount in a single transaction.\n\nGet the maximum amount of a particular asset that can be spent in a single transaction from a specified vault account (UTXO assets only, with a limitation on number of inputs embedded). Send several transactions if you want to spend more than the maximum spendable amount." + }, + { + "method": "put", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/addresses/{addressId}", + "name": "vault_accounts_addresses_putByVaultaccountidAndAssetidAndAddressid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + "addressId": { + "type": "string", + "description": "The address for which to add a description. For XRP, use
:, for all other assets, use only the address" + }, + "body": {} + } + } + ], + "description": "Update address description.\n\nUpdates the description of an existing address of an asset in a vault account." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/addresses/{addressId}/set_customer_ref_id", + "name": "vault_accounts_addresses_set_customer_ref_id_postByVaultaccountidAndAssetidAndAddressid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + "addressId": { + "type": "string", + "description": "The address for which to add a description. For XRP, use
:, for all other assets, use only the address" + }, + "body": {} + } + } + ], + "description": "Assign AML customer reference ID.\n\nSets an AML/KYT customer reference ID for a specific address." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/addresses/{addressId}/create_legacy", + "name": "vault_accounts_addresses_create_legacy_postByVaultaccountidAndAssetidAndAddressid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + "addressId": { + "type": "string", + "description": "The segwit address to translate" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "legacyAddress": { + "type": "string" + }, + "enterpriseAddress": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "bip44AddressIndex": { + "type": "integer" + } + } + }, + "description": "Convert a segwit address to legacy format.\n\nConverts an existing segwit address to the legacy format." + }, + { + "method": "get", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/unspent_inputs", + "name": "vault_accounts_unspent_inputs_getByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + } + } + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "input": { + "type": "object", + "properties": { + "txHash": { + "type": "string" + }, + "index": { + "type": "number" + } + } + }, + "address": { + "type": "string" + }, + "amount": { + "type": "string" + }, + "confirmations": { + "type": "number" + }, + "status": { + "type": "string" + } + } + } + }, + "description": "Get UTXO unspent inputs information.\n\nReturns unspent inputs information of an asset in a vault account." + }, + { + "method": "get", + "path": "/vault/public_key_info/", + "name": "vault_public_key_info_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "derivationPath": { + "type": "string" + }, + "algorithm": { + "type": "string" + }, + "compressed": { + "type": "boolean" + } + }, + "required": [ + "derivationPath", + "algorithm" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "array", + "items": { + "type": "number" + } + }, + "publicKey": { + "type": "string" + } + } + }, + "description": "Get the public key information.\n\nGets the public key information based on derivation path and signing algorithm." + }, + { + "method": "get", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/{change}/{addressIndex}/public_key_info", + "name": "vault_accounts_public_key_info_getByVaultaccountidAndAssetidAndChangeAndAddressindex", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset" + }, + "change": { + "type": "number" + }, + "addressIndex": { + "type": "number" + }, + "query": { + "type": "object", + "properties": { + "compressed": { + "type": "boolean" + } + }, + "required": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "array", + "items": { + "type": "number" + } + }, + "publicKey": { + "type": "string" + } + } + }, + "description": "Get the public key for a vault account.\n\nGets the public key information for the vault account." + }, + { + "method": "get", + "path": "/vault/assets", + "name": "vault_assets_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "accountNamePrefix": { + "type": "string" + }, + "accountNameSuffix": { + "type": "string" + } + }, + "required": [] + } + } + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + } + }, + "description": "Get asset balance for chosen assets.\n\nGets the assets amount summary for all accounts or filtered accounts." + }, + { + "method": "get", + "path": "/vault/assets/{assetId}", + "name": "vault_assets_getByAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "assetId": { + "type": "string", + "x-fb-entity": "asset" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + }, + "description": "Get vault balance by asset.\n\nGets the vault balance summary for an asset." + }, + { + "method": "get", + "path": "/exchange_accounts", + "name": "exchange_accounts_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "CIRCLE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "FTX", + "FIXUS", + "GEMINI", + "HITBTC", + "HUOBI", + "KORBIT", + "KRAKEN", + "LIQUID", + "POLONIEX", + "OKCOIN", + "OKEX", + "SEEDCX" + ] + }, + "name": { + "type": "string", + "description": "Display name of the exchange account" + }, + "status": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "total": { + "type": "string" + }, + "available": { + "type": "string" + } + } + } + }, + "tradingAccounts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "total": { + "type": "string" + }, + "available": { + "type": "string" + } + } + } + } + } + } + }, + "isSubaccount": { + "type": "boolean", + "description": "True if the account is a subaccount in an exchange" + }, + "mainAccountId": { + "description": "if the account is a sub-account, the ID of the main account", + "type": "string" + } + } + } + }, + "description": "List exchange accounts.\n\nReturns all exchange accounts." + }, + { + "method": "get", + "path": "/exchange_accounts/{exchangeAccountId}", + "name": "exchange_accounts_getByExchangeaccountid", + "parameters": [ + { + "type": "object", + "properties": { + "exchangeAccountId": { + "type": "string", + "minimum": 1, + "description": "The ID of the exchange account to return" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "CIRCLE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "FTX", + "FIXUS", + "GEMINI", + "HITBTC", + "HUOBI", + "KORBIT", + "KRAKEN", + "LIQUID", + "POLONIEX", + "OKCOIN", + "OKEX", + "SEEDCX" + ] + }, + "name": { + "type": "string", + "description": "Display name of the exchange account" + }, + "status": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "total": { + "type": "string" + }, + "available": { + "type": "string" + } + } + } + }, + "tradingAccounts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "total": { + "type": "string" + }, + "available": { + "type": "string" + } + } + } + } + } + } + }, + "isSubaccount": { + "type": "boolean", + "description": "True if the account is a subaccount in an exchange" + }, + "mainAccountId": { + "description": "if the account is a sub-account, the ID of the main account", + "type": "string" + } + } + }, + "description": "Find a specific exchange account.\n\nReturns an exchange account by ID." + }, + { + "method": "post", + "path": "/exchange_accounts/{exchangeAccountId}/internal_transfer", + "name": "exchange_accounts_internal_transfer_postByExchangeaccountid", + "parameters": [ + { + "type": "object", + "properties": { + "exchangeAccountId": { + "type": "string", + "minimum": 1, + "description": "The ID of the exchange account to return" + }, + "body": {} + } + } + ], + "description": "Internal tranfer for exchange accounts.\n\nTransfers funds between trading accounts under the same exchange account." + }, + { + "method": "post", + "path": "/exchange_accounts/{exchangeAccountId}/convert", + "name": "exchange_accounts_convert_postByExchangeaccountid", + "parameters": [ + { + "type": "object", + "properties": { + "exchangeAccountId": { + "type": "string", + "minimum": 1, + "description": "The ID of the exchange account. Please make sure the exchange supports conversions. To find the ID of your exchange account, use GET/exchange_accounts." + }, + "body": {} + } + } + ], + "description": "Convert exchange account funds from the source asset to the destination asset. Coinbase (USD to USDC, USDC to USD) and Bitso (MXN to USD) are supported conversions." + }, + { + "method": "get", + "path": "/exchange_accounts/{exchangeAccountId}/{assetId}", + "name": "exchange_accounts_getByExchangeaccountidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "exchangeAccountId": { + "type": "string", + "minimum": 1, + "description": "The ID of the exchange account to return" + }, + "assetId": { + "type": "string", + "minimum": 1, + "description": "The ID of the asset to return" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "total": { + "type": "string" + }, + "available": { + "type": "string" + } + } + }, + "description": "Find an asset for an exchange account.\n\nReturns an asset for an exchange account." + }, + { + "method": "get", + "path": "/fiat_accounts", + "name": "fiat_accounts_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "BLINC" + ] + }, + "name": { + "type": "string", + "description": "Display name of the fiat account" + }, + "address": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + } + } + } + } + } + } + }, + "description": "List fiat accounts.\n\nReturns all fiat accounts." + }, + { + "method": "get", + "path": "/fiat_accounts/{accountId}", + "name": "fiat_accounts_getByAccountid", + "parameters": [ + { + "type": "object", + "properties": { + "accountId": { + "type": "string", + "minimum": 1, + "description": "The ID of the fiat account to return" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "BLINC" + ] + }, + "name": { + "type": "string", + "description": "Display name of the fiat account" + }, + "address": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + } + } + } + } + } + }, + "description": "Find a specific fiat account.\n\nReturns a fiat account by ID." + }, + { + "method": "post", + "path": "/fiat_accounts/{accountId}/redeem_to_linked_dda", + "name": "fiat_accounts_redeem_to_linked_dda_postByAccountid", + "parameters": [ + { + "type": "object", + "properties": { + "accountId": { + "type": "string", + "minimum": 1, + "description": "The ID of the fiat account to use" + }, + "body": {} + } + } + ], + "description": "Redeem funds to DDA.\n\nRedeems funds to the linked DDA." + }, + { + "method": "post", + "path": "/fiat_accounts/{accountId}/deposit_from_linked_dda", + "name": "fiat_accounts_deposit_from_linked_dda_postByAccountid", + "parameters": [ + { + "type": "object", + "properties": { + "accountId": { + "type": "string", + "minimum": 1, + "description": "The ID of the fiat account to use" + }, + "body": {} + } + } + ], + "description": "Deposit funds from DDA.\n\nDeposits funds from the linked DDA." + }, + { + "method": "get", + "path": "/network_connections", + "name": "network_connections_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "localChannel": { + "deprecated": true, + "description": "Deprecated - Replaced by `localNetworkId`", + "type": "object", + "properties": { + "networkId": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "remoteChannel": { + "deprecated": true, + "description": "Deprecated - Replaced by `remoteNetworkId`", + "type": "object", + "properties": { + "networkId": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "localNetworkId": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "remoteNetworkId": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "routingPolicy": { + "type": "object", + "properties": { + "crypto": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "VAULT", + "EXCHANGE" + ], + "description": "The type of destination account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the destination account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "signet": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + }, + "signet_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + } + } + } + }, + "required": [ + "id", + "localNetworkId", + "remoteNetworkId", + "routingPolicy", + "status" + ] + } + }, + "description": "List network connections.\n\nReturns all network connections.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "post", + "path": "/network_connections", + "name": "network_connections_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "localNetworkId": { + "type": "string", + "description": "The network ID of the profile trying to create the connection." + }, + "remoteNetworkId": { + "type": "string", + "description": "The network ID the profile is attempting to connect to." + }, + "routingPolicy": { + "type": "object", + "properties": { + "crypto": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "VAULT", + "EXCHANGE" + ], + "description": "The type of destination account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the destination account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "signet": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + }, + "signet_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + } + } + } + }, + "required": [ + "localNetworkId", + "remoteNetworkId" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "localChannel": { + "deprecated": true, + "description": "Deprecated - Replaced by `localNetworkId`", + "type": "object", + "properties": { + "networkId": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "remoteChannel": { + "deprecated": true, + "description": "Deprecated - Replaced by `remoteNetworkId`", + "type": "object", + "properties": { + "networkId": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "localNetworkId": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "remoteNetworkId": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "routingPolicy": { + "type": "object", + "properties": { + "crypto": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "VAULT", + "EXCHANGE" + ], + "description": "The type of destination account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the destination account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "signet": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + }, + "signet_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + } + } + } + }, + "required": [ + "id", + "localNetworkId", + "remoteNetworkId", + "routingPolicy", + "status" + ] + }, + "description": "Creates a new network connection.\n\nInitiates a new network connection.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "patch", + "path": "/network_connections/{connectionId}/set_routing_policy", + "name": "network_connections_set_routing_policy_patchByConnectionid", + "parameters": [ + { + "type": "object", + "properties": { + "connectionId": { + "type": "string", + "minimum": 1, + "description": "The ID of the network connection" + }, + "body": {} + } + } + ], + "output": {}, + "description": "Update network connection routing policy.\n\nUpdates an existing network connection's routing policy.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "get", + "path": "/network_connections/{connectionId}/is_third_party_routing/{assetType}", + "name": "network_connections_is_third_party_routing_getByConnectionidAndAssettype", + "parameters": [ + { + "type": "object", + "properties": { + "connectionId": { + "type": "string", + "minimum": 1, + "description": "The ID of the network connection" + }, + "assetType": { + "type": "string", + "enum": [ + "CRYPTO", + "SIGNET", + "SEN", + "SIGNET_TEST", + "SEN_TEST" + ], + "description": "The destination asset type" + } + } + } + ], + "output": {}, + "description": "Retrieve third-party network routing validation by asset type.\n\nThe Fireblocks Network allows for flexibility around incoming deposits. A receiver can receive network deposits to locations other than Fireblocks. This endpoint validates whether future transactions are routed to the displayed recipient or to a 3rd party." + }, + { + "method": "get", + "path": "/network_connections/{connectionId}", + "name": "network_connections_getByConnectionid", + "parameters": [ + { + "type": "object", + "properties": { + "connectionId": { + "type": "string", + "minimum": 1, + "description": "The ID of the connection" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "localChannel": { + "deprecated": true, + "description": "Deprecated - Replaced by `localNetworkId`", + "type": "object", + "properties": { + "networkId": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "remoteChannel": { + "deprecated": true, + "description": "Deprecated - Replaced by `remoteNetworkId`", + "type": "object", + "properties": { + "networkId": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "localNetworkId": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "remoteNetworkId": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "routingPolicy": { + "type": "object", + "properties": { + "crypto": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "VAULT", + "EXCHANGE" + ], + "description": "The type of destination account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the destination account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "signet": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + }, + "signet_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + } + } + } + }, + "required": [ + "id", + "localNetworkId", + "remoteNetworkId", + "routingPolicy", + "status" + ] + }, + "description": "Get a network connection.\n\nGets a network connection by ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "delete", + "path": "/network_connections/{connectionId}", + "name": "network_connections_eraseByConnectionid", + "parameters": [ + { + "type": "object", + "properties": { + "connectionId": { + "type": "string", + "minimum": 1, + "description": "The ID of the network connection to delete" + } + } + } + ], + "output": {}, + "description": "Deletes a network connection by ID.\n\nDeletes an existing network connection specified by its connection ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "get", + "path": "/network_ids", + "name": "network_ids_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "array", + "items": {} + }, + "description": "Returns all network IDs, both local IDs and discoverable remote IDs.\n\nRetrieves a list of all local and discoverable remote network IDs.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "post", + "path": "/network_ids", + "name": "network_ids_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "routingPolicy": { + "type": "object", + "properties": { + "crypto": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "VAULT", + "EXCHANGE" + ], + "description": "The type of destination account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the destination account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "signet": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + }, + "signet_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + } + } + }, + "isDiscoverable": { + "type": "boolean", + "description": "The specific network is discoverable." + } + } + }, + "description": "Creates a new Network ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "get", + "path": "/network_ids/{networkId}", + "name": "network_ids_getByNetworkid", + "parameters": [ + { + "type": "object", + "properties": { + "networkId": { + "type": "string", + "minimum": 1, + "description": "The ID of the network" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "routingPolicy": { + "type": "object", + "properties": { + "crypto": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "VAULT", + "EXCHANGE" + ], + "description": "The type of destination account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the destination account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "signet": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + }, + "signet_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + } + } + }, + "isDiscoverable": { + "type": "boolean", + "description": "The specific network is discoverable." + } + } + }, + "description": "Returns specific network ID.\n\nRetrieves a network by its ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "delete", + "path": "/network_ids/{networkId}", + "name": "network_ids_eraseByNetworkid", + "parameters": [ + { + "type": "object", + "properties": { + "networkId": { + "type": "string", + "minimum": 1, + "description": "The ID of the network" + } + } + } + ], + "output": {}, + "description": "Deletes specific network ID.\n\nDeletes a network by its ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "patch", + "path": "/network_ids/{networkId}/set_routing_policy", + "name": "network_ids_set_routing_policy_patchByNetworkid", + "parameters": [ + { + "type": "object", + "properties": { + "networkId": { + "type": "string", + "minimum": 1, + "description": "The ID of the network" + }, + "body": {} + } + } + ], + "output": {}, + "description": "Update network id routing policy.\n\nUpdates the routing policy of a specified network ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "patch", + "path": "/network_ids/{networkId}/set_discoverability", + "name": "network_ids_set_discoverability_patchByNetworkid", + "parameters": [ + { + "type": "object", + "properties": { + "networkId": { + "type": "string", + "minimum": 1, + "description": "The ID of the network" + }, + "body": {} + } + } + ], + "output": {}, + "description": "Update network ID's discoverability.\n\nUpdate whether or not the network ID is discoverable by others.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "patch", + "path": "/network_ids/{networkId}/set_name", + "name": "network_ids_set_name_patchByNetworkid", + "parameters": [ + { + "type": "object", + "properties": { + "networkId": { + "type": "string", + "minimum": 1, + "description": "The ID of the network" + }, + "body": {} + } + } + ], + "output": {}, + "description": "Update network ID's name.\n\nUpdates name of a specified network ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "get", + "path": "/internal_wallets", + "name": "internal_wallets_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + } + }, + "description": "List internal wallets.\n\nGets a list of internal wallets.\n\n**Note**: BTC-based assets belonging to whitelisted addresses cannot be retrieved between 00:00 UTC and 00:01 UTC daily due to third-party provider, Blockchair, being unavailable for this 60 second period. Please wait until the next minute to retrieve BTC-based assets.\n" + }, + { + "method": "post", + "path": "/internal_wallets", + "name": "internal_wallets_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + }, + "description": "Create an internal wallet.\n\nCreates a new internal wallet with the requested name." + }, + { + "method": "get", + "path": "/internal_wallets/{walletId}", + "name": "internal_wallets_getByWalletid", + "parameters": [ + { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet to return" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + }, + "description": "Get assets for internal wallet.\n\nReturns all assets in an internal wallet by ID." + }, + { + "method": "delete", + "path": "/internal_wallets/{walletId}", + "name": "internal_wallets_eraseByWalletid", + "parameters": [ + { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet to delete" + } + } + } + ], + "description": "Delete an internal wallet.\n\nDeletes an internal wallet by ID." + }, + { + "method": "post", + "path": "/internal_wallets/{walletId}/set_customer_ref_id", + "name": "internal_wallets_set_customer_ref_id_postByWalletid", + "parameters": [ + { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "minimum": 1, + "description": "The wallet ID" + }, + "body": {} + } + } + ], + "description": "Set an AML/KYT customer reference ID for an internal wallet.\n\nSets an AML/KYT customer reference ID for the specific internal wallet." + }, + { + "method": "get", + "path": "/internal_wallets/{walletId}/{assetId}", + "name": "internal_wallets_getByWalletidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet" + }, + "assetId": { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset", + "description": "The ID of the asset to return" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + }, + "description": "Get an asset from an internal wallet.\n\nReturns information for an asset in an internal wallet." + }, + { + "method": "post", + "path": "/internal_wallets/{walletId}/{assetId}", + "name": "internal_wallets_postByWalletidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "The ID of the wallet" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset to add" + }, + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + }, + "description": "Add an asset to an internal wallet.\n\nAdds an asset to an existing internal wallet." + }, + { + "method": "delete", + "path": "/internal_wallets/{walletId}/{assetId}", + "name": "internal_wallets_eraseByWalletidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet" + }, + "assetId": { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset", + "description": "The ID of the asset to delete" + } + } + } + ], + "description": "Delete a whitelisted address from an internal wallet.\n\nDeletes a whitelisted address (for an asset) from an internal wallet." + }, + { + "method": "get", + "path": "/external_wallets", + "name": "external_wallets_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + } + }, + "description": "List external wallets.\n\nGets a list of external wallets under the workspace." + }, + { + "method": "post", + "path": "/external_wallets", + "name": "external_wallets_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + }, + "description": "Create an external wallet.\n\nCreates a new external wallet with the requested name." + }, + { + "method": "get", + "path": "/external_wallets/{walletId}", + "name": "external_wallets_getByWalletid", + "parameters": [ + { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet to return" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + }, + "description": "Find an external wallet.\n\nReturns an external wallet by ID." + }, + { + "method": "delete", + "path": "/external_wallets/{walletId}", + "name": "external_wallets_eraseByWalletid", + "parameters": [ + { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet to delete" + } + } + } + ], + "description": "Delete an external wallet.\n\nDeletes an external wallet by ID." + }, + { + "method": "post", + "path": "/external_wallets/{walletId}/set_customer_ref_id", + "name": "external_wallets_set_customer_ref_id_postByWalletid", + "parameters": [ + { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "minimum": 1, + "description": "The wallet ID" + }, + "body": {} + } + } + ], + "description": "Set an AML customer reference ID for an external wallet.\n\nSets an AML/KYT customer reference ID for the specific external wallet." + }, + { + "method": "get", + "path": "/external_wallets/{walletId}/{assetId}", + "name": "external_wallets_getByWalletidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet" + }, + "assetId": { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset", + "description": "The ID of the asset to return" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + }, + "additionalInfo": { + "type": "array", + "items": { + "type": "object", + "properties": { + "accountHolderGivenName": { + "type": "string" + }, + "accountHolderSurname": { + "type": "string" + }, + "accountHolderCity": { + "type": "string" + }, + "accountHolderCountry": { + "type": "string" + }, + "accountHolderAddress1": { + "type": "string" + }, + "accountHolderAddress2": { + "type": "string" + }, + "accountHolderDistrict": { + "type": "string" + }, + "accountHolderPostalCode": { + "type": "string" + }, + "abaRoutingNumber": { + "type": "string" + }, + "abaAccountNumber": { + "type": "string" + }, + "abaCountry": { + "type": "string" + }, + "iban": { + "type": "string" + }, + "ibanCity": { + "type": "string" + }, + "ibanCountry": { + "type": "string" + }, + "speiClabe": { + "type": "string" + }, + "speiName": { + "type": "string" + } + } + } + } + } + }, + "description": "Get an asset from an external wallet.\n\nReturns an external wallet by wallet ID and asset ID." + }, + { + "method": "post", + "path": "/external_wallets/{walletId}/{assetId}", + "name": "external_wallets_postByWalletidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "The ID of the wallet" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset to add" + }, + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + }, + "additionalInfo": { + "type": "array", + "items": { + "type": "object", + "properties": { + "accountHolderGivenName": { + "type": "string" + }, + "accountHolderSurname": { + "type": "string" + }, + "accountHolderCity": { + "type": "string" + }, + "accountHolderCountry": { + "type": "string" + }, + "accountHolderAddress1": { + "type": "string" + }, + "accountHolderAddress2": { + "type": "string" + }, + "accountHolderDistrict": { + "type": "string" + }, + "accountHolderPostalCode": { + "type": "string" + }, + "abaRoutingNumber": { + "type": "string" + }, + "abaAccountNumber": { + "type": "string" + }, + "abaCountry": { + "type": "string" + }, + "iban": { + "type": "string" + }, + "ibanCity": { + "type": "string" + }, + "ibanCountry": { + "type": "string" + }, + "speiClabe": { + "type": "string" + }, + "speiName": { + "type": "string" + } + } + } + } + } + }, + "description": "Add an asset to an external wallet.\n\nAdds an asset to an existing external wallet." + }, + { + "method": "delete", + "path": "/external_wallets/{walletId}/{assetId}", + "name": "external_wallets_eraseByWalletidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet" + }, + "assetId": { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset", + "description": "The ID of the asset to delete" + } + } + } + ], + "description": "Delete an asset from an external wallet.\n\nDeletes an external wallet asset by ID." + }, + { + "method": "get", + "path": "/contracts", + "name": "contracts_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + } + }, + "description": "List contracts.\n\nGets a list of contracts." + }, + { + "method": "post", + "path": "/contracts", + "name": "contracts_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + }, + "description": "Create a contract.\n\nCreates a new contract." + }, + { + "method": "get", + "path": "/contracts/{contractId}", + "name": "contracts_getByContractid", + "parameters": [ + { + "type": "object", + "properties": { + "contractId": { + "type": "string", + "minimum": 1, + "description": "The ID of the contract to return" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + }, + "description": "Find a specific contract.\n\nReturns a contract by ID." + }, + { + "method": "delete", + "path": "/contracts/{contractId}", + "name": "contracts_eraseByContractid", + "parameters": [ + { + "type": "object", + "properties": { + "contractId": { + "type": "string", + "minimum": 1, + "description": "The ID of the contract to delete" + } + } + } + ], + "description": "Delete a contract.\n\nDeletes a contract by ID." + }, + { + "method": "get", + "path": "/contracts/{contractId}/{assetId}", + "name": "contracts_getByContractidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "contractId": { + "type": "string", + "minimum": 1, + "description": "The ID of the contract" + }, + "assetId": { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset", + "description": "The ID of the asset to return" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + }, + "additionalInfo": { + "type": "array", + "items": { + "type": "object", + "properties": { + "accountHolderGivenName": { + "type": "string" + }, + "accountHolderSurname": { + "type": "string" + }, + "accountHolderCity": { + "type": "string" + }, + "accountHolderCountry": { + "type": "string" + }, + "accountHolderAddress1": { + "type": "string" + }, + "accountHolderAddress2": { + "type": "string" + }, + "accountHolderDistrict": { + "type": "string" + }, + "accountHolderPostalCode": { + "type": "string" + }, + "abaRoutingNumber": { + "type": "string" + }, + "abaAccountNumber": { + "type": "string" + }, + "abaCountry": { + "type": "string" + }, + "iban": { + "type": "string" + }, + "ibanCity": { + "type": "string" + }, + "ibanCountry": { + "type": "string" + }, + "speiClabe": { + "type": "string" + }, + "speiName": { + "type": "string" + } + } + } + } + } + }, + "description": "Find a contract asset.\n\nReturns a contract asset by ID." + }, + { + "method": "post", + "path": "/contracts/{contractId}/{assetId}", + "name": "contracts_postByContractidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "contractId": { + "type": "string", + "description": "The ID of the contract" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset to add" + }, + "body": {} + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + }, + "additionalInfo": { + "type": "array", + "items": { + "type": "object", + "properties": { + "accountHolderGivenName": { + "type": "string" + }, + "accountHolderSurname": { + "type": "string" + }, + "accountHolderCity": { + "type": "string" + }, + "accountHolderCountry": { + "type": "string" + }, + "accountHolderAddress1": { + "type": "string" + }, + "accountHolderAddress2": { + "type": "string" + }, + "accountHolderDistrict": { + "type": "string" + }, + "accountHolderPostalCode": { + "type": "string" + }, + "abaRoutingNumber": { + "type": "string" + }, + "abaAccountNumber": { + "type": "string" + }, + "abaCountry": { + "type": "string" + }, + "iban": { + "type": "string" + }, + "ibanCity": { + "type": "string" + }, + "ibanCountry": { + "type": "string" + }, + "speiClabe": { + "type": "string" + }, + "speiName": { + "type": "string" + } + } + } + } + } + }, + "description": "Add an asset to a contract.\n\nAdds an asset to an existing contract." + }, + { + "method": "delete", + "path": "/contracts/{contractId}/{assetId}", + "name": "contracts_eraseByContractidAndAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "contractId": { + "type": "string", + "minimum": 1, + "description": "The ID of the contract" + }, + "assetId": { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset", + "description": "The ID of the asset to delete" + } + } + } + ], + "description": "Delete a contract asset.\n\nDeletes a contract asset by ID." + }, + { + "method": "get", + "path": "/supported_assets", + "name": "supported_assets_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "ALGO_ASSET", + "BASE_ASSET", + "BEP20", + "COMPOUND", + "ERC20", + "FIAT", + "SOL_ASSET", + "TRON_TRC20", + "XLM_ASSET", + "XDB_ASSET" + ] + }, + "contractAddress": { + "type": "string" + }, + "nativeAsset": { + "type": "string" + }, + "decimals": { + "type": "number" + } + }, + "required": [ + "id", + "name", + "type" + ] + } + }, + "description": "List all asset types supported by Fireblocks.\n\nReturns all asset types supported by Fireblocks." + }, + { + "method": "get", + "path": "/estimate_network_fee", + "name": "estimate_network_fee_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The asset for which to estimate the fee" + } + }, + "required": [ + "assetId" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "low": { + "type": "object", + "properties": { + "feePerByte": { + "type": "string" + }, + "gasPrice": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "baseFee": { + "description": "(optional) Base Fee according to EIP-1559 (ETH assets)", + "type": "string" + }, + "priorityFee": { + "description": "(optional) Priority Fee according to EIP-1559 (ETH assets)", + "type": "string" + } + } + }, + "medium": { + "type": "object", + "properties": { + "feePerByte": { + "type": "string" + }, + "gasPrice": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "baseFee": { + "description": "(optional) Base Fee according to EIP-1559 (ETH assets)", + "type": "string" + }, + "priorityFee": { + "description": "(optional) Priority Fee according to EIP-1559 (ETH assets)", + "type": "string" + } + } + }, + "high": { + "type": "object", + "properties": { + "feePerByte": { + "type": "string" + }, + "gasPrice": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "baseFee": { + "description": "(optional) Base Fee according to EIP-1559 (ETH assets)", + "type": "string" + }, + "priorityFee": { + "description": "(optional) Priority Fee according to EIP-1559 (ETH assets)", + "type": "string" + } + } + } + }, + "required": [ + "low", + "medium", + "high" + ] + }, + "description": "Estimate the required fee for an asset.\n\nGets the estimated required fee for an asset. For UTXO based assets, the response will contain the suggested fee per byte, for ETH/ETC based assets, the suggested gas price, and for XRP/XLM, the transaction fee." + }, + { + "method": "get", + "path": "/transactions/validate_address/{assetId}/{address}", + "name": "transactions_validate_address_getByAssetidAndAddress", + "parameters": [ + { + "type": "object", + "properties": { + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The asset of the address" + }, + "address": { + "type": "string", + "description": "The address to validate" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "isValid": { + "type": "boolean" + }, + "isActive": { + "type": "boolean" + }, + "requiresTag": { + "type": "boolean" + } + } + }, + "description": "Validate destination address.\n\nChecks if an address is valid (for XRP, DOT, XLM, and EOS)." + }, + { + "method": "get", + "path": "/transactions", + "name": "transactions_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "before": { + "type": "string", + "description": "Unix timestamp in milliseconds. Returns only transactions created before the specified date" + }, + "after": { + "type": "string", + "description": "Unix timestamp in milliseconds. Returns only transactions created after the specified date" + }, + "status": { + "type": "string", + "description": "You can filter by one of the statuses." + }, + "limit": { + "type": "integer", + "minimum": 1, + "default": 200, + "description": "Limits the number of results. If not provided, a limit of 200 will be used. The maximum allowed limit is 500" + }, + "sourceId": { + "type": "string", + "description": "The source ID of the transaction" + }, + "destId": { + "type": "string", + "description": "The destination ID of the transaction" + }, + "assets": { + "type": "string", + "description": "A list of assets to filter by, seperated by commas" + }, + "txHash": { + "type": "string", + "description": "Returns only results with a specified txHash" + }, + "sourceWalletId": { + "type": "string", + "description": "Returns only results where the source is a specific end user wallet" + }, + "destWalletId": { + "type": "string", + "description": "Returns only results where the destination is a specific end user wallet" + } + }, + "required": [] + } + } + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the transaction." + }, + "externalTxId": { + "type": "string", + "description": "Unique transaction ID provided by the user. Fireblocks highly recommends setting an `externalTxId` for every transaction created, to avoid submitting the same transaction twice." + }, + "status": { + "type": "string", + "description": "The primary status of the transaction. For details, see [Primary transaction statuses](https://developers.fireblocks.com/reference/primary-transaction-statuses)." + }, + "subStatus": { + "type": "string", + "description": "See [Transaction substatuses](https://developers.fireblocks.com/reference/transaction-substatuses) for the list of transaction sub statuses." + }, + "txHash": { + "type": "string", + "description": "The hash of the transaction on the blockchain.\n * This parameter exists if at least one of the following conditions is met:\n\n 1. The transaction’s source type is `UNKNOWN`, `WHITELISTED_ADDRESS`, `NETWORK_CONNECTION`, `ONE_TIME_ADDRESS`, `FIAT_ACCOUNT` or `GAS_STATION`.\n\n 2. The transaction’s source type is `VAULT` and the status is either: `CONFIRMING`, `COMPLETED`, or was in any of these statuses prior to changing to `FAILED` or `REJECTED`. In some instances, transactions in status `BROADCASTING` will include the txHash as well.\n\n 3. The transaction’s source type is `EXCHANGE_ACCOUNT` and the transaction’s destination type is `VAULT`, and the status is either: `CONFIRMING`, `COMPLETED`, or was in any of these status prior to changing to `FAILED`.\n \n\n* In addition, the following conditions must be met:\n\n 1. The asset is a crypto asset (not fiat).\n\n 2. The transaction operation is not RAW or `TYPED_MESSAGE`." + }, + "operation": { + "type": "string", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE", + "ENABLE_ASSET", + "STAKE", + "UNSTAKE", + "WITHDRAW", + "REDEEM_FROM_COMPOUND", + "SUPPLY_TO_COMPOUND" + ], + "description": "* `TRANSFER` - Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n* `ENABLE_ASSET` - Algorand, DigitalBits, Solana, and Stellar require an on-chain transaction to create an asset wallet and enable the deposit address. This transaction is automatically created when adding assets on these blockchains at a vault account.\n* `STAKE` - Assign assets to a staking pool managed by a staking validator. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n* `UNSTAKE` - Remove assets from a staking pool managed by a staking validator. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n* `WITHDRAW` - Transfer assets from a dedicated staking vault account to another address. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n\n **Note:** Fireblocks will rename this type from `WITHDRAW` to a different type name soon. There will be a 7-day notice regarding the new type name.\n\n* `SUPPLY_TO_COMPOUND` - Deprecated since April 1st, 2023. Older transactions may have this as their operation, in case users in the workspace have used the direct integration between Fireblocks and the Compound DeFI protocol.\n* `REDEEM_FROM_COMPOUND` - Deprecated since April 1st, 2023. Older transactions may have this as their operation, in case users in the workspace have used the direct integration between Fireblocks and the Compound DeFI protocol.\n" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, that describes the transaction at your Fireblocks workspace." + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT`, `BURN`, `ENABLE_ASSET`,`STAKE` ,`UNSTAKE` or `WITHDRAW` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset" + }, + "source": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name. In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "sourceAddress": { + "type": "string", + "description": "For account based assets only, the source address of the transaction.\n**Note:** If the status is `CONFIRMING`, `COMPLETED`, or has been `CONFIRMING`; then moved forward to `FAILED` or `REJECTED`, then this parameter will contain the source address. In any other case, this parameter will be empty." + }, + "tag": { + "type": "string", + "description": "Source address tag for XRP, used as memo for EOS/XLM, or Bank Transfer Description for the fiat provider BLINC (by BCB Group)." + }, + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destinations": { + "type": "array", + "description": "The transaction’s destinations.\n**Note:** In case the transaction is sent to a single destination, the `destination` parameter is used instead of this.", + "items": { + "type": "object", + "properties": { + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destinationAddress": { + "description": "Address where the asset was transferred." + }, + "destinationAddressDescription": { + "description": "Description of the address." + }, + "amount": { + "type": "string", + "description": "The amount to be sent to this destination." + }, + "amountUSD": { + "type": "string", + "description": "The USD value of the requested amount." + }, + "amlScreeningResult": { + "type": "object", + "description": "The result of the AML screening.", + "properties": { + "provider": { + "type": "string" + }, + "payload": { + "type": "object" + } + } + }, + "customerRefId": { + "description": "The ID for AML providers to associate the owner of funds with transactions." + }, + "authorizationInfo": { + "type": "object", + "description": "The information about your [Transaction Authorization Policy (TAP).](https://developers.fireblocks.com/docs/capabilities#transaction-authorization-policy-tap)", + "properties": { + "allowOperatorAsAuthorizer": { + "type": "boolean" + }, + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "th": { + "type": "number" + }, + "users": { + "type": "object", + "additionalProperties": { + "type": "string", + "enum": [ + "PENDING_AUTHORIZATION", + "APPROVED", + "REJECTED", + "NA" + ] + } + } + } + } + } + } + } + } + } + }, + "destinationAddress": { + "type": "string", + "description": "Address where the asset were transferred.\nNotes:\n - For [Multi destination transactions](https://support.fireblocks.io/hc/en-us/articles/360018447980-Multi-destination-transactions), this parameter will be empty. In this case, you should refer to the destinations field.\n - If the status is `CONFIRMING`, `COMPLETED`, or has been `CONFIRMING`; then moved forward to `FAILED` or `REJECTED`, then this parameter will contain the destination address. In any other case, this parameter will be empty." + }, + "destinationAddressDescription": { + "type": "string", + "description": "Description of the address." + }, + "destinationTag": { + "type": "string", + "description": "Destination address tag for XRP, used as memo for EOS/XLM, or Bank Transfer Description for the fiat provider BLINC (by BCB Group)." + }, + "contractCallDecodedData": { + "description": "Decoded data for `CONTRACT_CALL` operations. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for setting this parameter's value.", + "type": "object", + "properties": { + "contractName": { + "type": "string" + }, + "functionCalls": { + "type": "array", + "items": { + "type": "object" + } + } + } + }, + "amountInfo": { + "type": "object", + "description": "The details of the requested amount to transfer.", + "properties": { + "amount": { + "description": "If the transfer is a withdrawal from an exchange, the actual amount that was requested to be transferred. Otherwise, the requested amount.", + "type": "string" + }, + "requestedAmount": { + "description": "The amount requested by the user.", + "type": "string" + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction.", + "type": "string" + }, + "amountUSD": { + "description": "The USD value of the requested amount.", + "type": "string" + } + } + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "For transactions initiated via this Fireblocks workspace, when set to `true`, the fee is deducted from the requested amount.\n\n**Note**: This parameter can only be considered if a transaction's asset is a base asset, such as ETH or MATIC. If the asset can't be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account." + }, + "feeInfo": { + "type": "object", + "description": "Details of the transaction's fee.", + "properties": { + "networkFee": { + "description": "The fee paid to the network", + "type": "string" + }, + "serviceFee": { + "description": "The total fee deducted by the exchange from the actual requested amount (serviceFee = amount - netAmount)", + "type": "string" + }, + "gasPrice": { + "type": "string" + } + } + }, + "feeCurrency": { + "type": "string", + "description": "The asset which was withdrawn to pay the transaction fee, for example ETH for EVM-based blockchains, BTC for Tether Omni." + }, + "networkRecords": { + "type": "array", + "description": "In case a single transaction resulted with multiple transfers, for example a result of a contract call, then this parameter specifies each transfer that took place on the blockchain. In case of a single transfer transaction, this parameter is empty.", + "items": { + "type": "object", + "properties": { + "source": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name. In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "txHash": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset" + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction", + "type": "string" + }, + "isDropped": { + "type": "boolean" + }, + "type": { + "type": "string" + }, + "destinationAddress": { + "type": "string" + }, + "sourceAddress": { + "type": "string" + }, + "amountUSD": { + "type": "string" + }, + "index": { + "type": "number" + }, + "rewardInfo": { + "type": "object", + "description": "This field is relevant only for Algorand transactions. Both `srcRewards` and `destRewards` will appear only for Vault to Vault transactions, otherwise you will receive only the Fireblocks’ side of the transaction.", + "properties": { + "srcRewards": { + "type": "string" + }, + "destRewards": { + "type": "string" + } + } + } + } + } + }, + "createdAt": { + "type": "number", + "description": "The transaction’s creation date and time, in unix timestamp." + }, + "lastUpdated": { + "type": "number", + "description": "The transaction’s last update date and time, in unix timestamp." + }, + "createdBy": { + "type": "string", + "description": "User ID of the initiator of the transaction." + }, + "signedBy": { + "type": "array", + "description": "User ID’s of the signers of the transaction.", + "items": { + "type": "string" + } + }, + "rejectedBy": { + "type": "string", + "description": "User ID of the user that rejected the transaction (in case it was rejected)." + }, + "authorizationInfo": { + "type": "object", + "description": "The information about your [Transaction Authorization Policy (TAP).](https://developers.fireblocks.com/docs/capabilities#transaction-authorization-policy-tap)", + "properties": { + "allowOperatorAsAuthorizer": { + "type": "boolean" + }, + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "th": { + "type": "number" + }, + "users": { + "type": "object", + "additionalProperties": { + "type": "string", + "enum": [ + "PENDING_AUTHORIZATION", + "APPROVED", + "REJECTED", + "NA" + ] + } + } + } + } + } + } + }, + "exchangeTxId": { + "type": "string", + "description": "If the transaction originated from an exchange, this is the ID of this transaction at the exchange." + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions." + }, + "amlScreeningResult": { + "type": "object", + "description": "The result of the AML screening.", + "properties": { + "provider": { + "type": "string" + }, + "payload": { + "type": "object" + } + } + }, + "extraParameters": { + "type": "object", + "properties": {}, + "description": "Additional protocol / operation specific key-value parameters:\n\nFor UTXO-based blockchain input selection, add the key `inputsSelection` with the value set the [input selection structure.](https://developers.fireblocks.com/reference/transaction-objects#inputsselection) The inputs can be retrieved from the [Retrieve Unspent Inputs endpoint.](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid-assetid-unspent-inputs)\n\nFor `RAW` operations, add the key `rawMessageData` with the value set to the [raw message data structure.](https://developers.fireblocks.com/reference/raw-signing-objects#rawmessagedata)\n\nFor `CONTRACT_CALL` operations, add the key `contractCallData` with the value set to the Ethereum smart contract Application Binary Interface (ABI) payload. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n" + }, + "signedMessages": { + "type": "object", + "description": "A list of signed messages returned for raw signing.", + "properties": { + "content": { + "type": "string" + }, + "algorithm": { + "type": "string", + "enum": [ + "MPC_ECDSA_SECP256K1", + "MPC_EDDSA_ED25519" + ] + }, + "derivationPath": { + "type": "array", + "items": { + "type": "number" + } + }, + "signature": { + "type": "object", + "properties": { + "fullSig": { + "type": "string" + }, + "r": { + "type": "string" + }, + "s": { + "type": "string" + }, + "v": { + "type": "number" + } + } + }, + "publicKey": { + "type": "string" + } + } + }, + "numOfConfirmations": { + "type": "number", + "description": "The number of confirmations of the transaction. The number will increase until the transaction will be considered completed according to the confirmation policy." + }, + "blockInfo": { + "type": "object", + "description": "The block hash and height of the block that this transaction was mined in.\n **Note**: If an outgoing transaction uses the destinations object with more than one value in the array, blockHash is set to null.", + "properties": { + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + } + } + }, + "index": { + "type": "number", + "description": "For UTXO based assets this is the vOut, for Ethereum based, this is the index of the event of the contract call.\n **Note:** This field is not returned if a transaction uses the `destinations` object with more than one value." + }, + "rewardInfo": { + "type": "object", + "description": "This field is relevant only for Algorand transactions. Both `srcRewards` and `destRewards` will appear only for Vault to Vault transactions, otherwise you will receive only the Fireblocks’ side of the transaction.", + "properties": { + "srcRewards": { + "type": "string" + }, + "destRewards": { + "type": "string" + } + } + }, + "systemMessages": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "WARN", + "BLOCK" + ] + }, + "message": { + "type": "string", + "description": "A response from Fireblocks that communicates a message about the health of the process being performed. If this object is returned with data, you should expect potential delays or incomplete transaction statuses.", + "example": "Slow transaction processing. Outgoing transactions might be stuck." + } + } + }, + "addressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME" + ] + }, + "requestedAmount": { + "description": "The amount requested by the user. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "amount": { + "description": "If the transfer is a withdrawal from an exchange, the actual amount that was requested to be transferred. Otherwise, the requested amount. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "amountUSD": { + "description": "The USD value of the requested amount. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "nullable": true, + "deprecated": true + }, + "serviceFee": { + "description": "The total fee deducted by the exchange from the actual requested amount (`serviceFee` = `amount` - `netAmount`). Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "fee": { + "description": "Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "networkFee": { + "description": "The fee paid to the network. Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + } + } + } + }, + "description": "List transaction history.\n\nLists the transaction history for your workspace." + }, + { + "method": "post", + "path": "/transactions", + "name": "transactions_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "operation": { + "type": "string", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE" + ], + "description": "* `TRANSFER` - The default value for an operation. Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, to describe the transaction at your Fireblocks workspace.", + "example": "Ticket 123" + }, + "externalTxId": { + "type": "string", + "description": "An optional but highly recommended parameter. Fireblocks will reject future transactions with same ID. \n \nYou should set this to a unique ID representing the transaction, to avoid submitting the same transaction twice. This helps with cases where submitting the transaction responds with an error code due to Internet interruptions, but the transaction was actually sent and processed. To validate whether a transaction has been processed, [Find a specific transaction by external transaction ID](https://developers.fireblocks.com/reference/get_transactions-external-tx-id-externaltxid).\n \nThere is no specific format required for this parameter.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT` or `BURN` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset", + "example": "ETH" + }, + "source": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT", + "COMPOUND", + "GAS_STATION", + "ONE_TIME_ADDRESS", + "UNKNOWN", + "END_USER_WALLET" + ] + }, + "subType": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "BLINC", + "BYBIT", + "CIRCLE", + "COINBASEEXCHANGE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "GEMINI", + "HITBTC", + "HUOBI", + "INDEPENDENTRESERVE", + "KORBIT", + "KRAKEN", + "KRAKENINTL", + "KUCOIN", + "LIQUID", + "OKCOIN", + "OKEX", + "PAXOS", + "POLONIEX", + "External", + "Internal" + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "walletId": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "type" + ] + }, + "destination": {}, + "destinations": { + "type": "array", + "description": "For UTXO based blockchains, you can send a single transaction to multiple destinations.", + "items": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "destination": {} + } + } + }, + "amount": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "0.02" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 0.02 + } + ], + "description": "For `TRANSFER` operations, the requested amount to transfer, in the asset’s unit. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "\"When set to `true`, the fee will be deducted from the requested amount.\"\n\n**Note**: This parameter can only be considered if a transaction’s asset is a base asset, such as ETH or MATIC. If the asset can’t be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account." + }, + "forceSweep": { + "type": "boolean", + "description": "For Polkadot, Kusama and Westend transactions only. When set to true, Fireblocks will empty the asset wallet.\n\n **Note:** If set to true when the source account is exactly 1 DOT, the transaction will fail. Any amount more or less than 1 DOT succeeds. This is a Polkadot blockchain limitation." + }, + "feeLevel": { + "type": "string", + "enum": [ + "LOW", + "MEDIUM", + "HIGH" + ], + "description": "For UTXO or EVM-based blockchains only. Defines the blockchain fee level which will be payed for the transaction. Alternatively, specific fee estimation parameters exist below." + }, + "fee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For UTXO-based blockchains, the fee per bytes in the asset’s smallest unit (Satoshi, Latoshi, etc.). For Ripple, the fee for the transaction. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "priorityFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "2" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 2 + } + ], + "description": "For Ethereum-based blockchains only, the fee for EIP-1559 transaction pricing mechanism. Value is in Gwei. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "failOnLowFee": { + "type": "boolean", + "description": "When set to `true`, in case the current `MEDIUM` fee level is higher than the one specified in the transaction, the transaction will fail to avoid getting stuck with no confirmations." + }, + "maxFee": { + "description": "The maximum fee (gas price or fee per byte) that should be payed for the transaction. In case the current value of the requested `feeLevel` is higher than this requested maximum fee. Represented by a numeric string for accurate precision.", + "type": "string", + "example": "120" + }, + "gasLimit": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "21000" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 21000 + } + ], + "description": "For EVM-based blockchains only. Units of gas required to process the transaction. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "gasPrice": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For non-EIP-1559, EVM-based transactions. Price per gas unit (in Ethereum this is specified in Gwei). Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "networkFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For EVM-based blockchains only. The total transaction fee in the blockchain’s largest unit. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated. - The transaction blockchain fee.\n- For Ethereum, you can't pass gasPrice, gasLimit and networkFee all together.\n- A numeric value representation is required." + }, + "replaceTxByHash": { + "type": "string", + "description": "For EVM-based blockchains only. In case a transaction is stuck, specify the hash of the stuck transaction to replace it by this transaction with a higher fee, or to replace it with this transaction with a zero fee and drop it from the blockchain.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "extraParameters": { + "type": "object", + "properties": {}, + "description": "Additional protocol / operation specific key-value parameters:\n\nFor UTXO-based blockchain input selection, add the key `inputsSelection` with the value set the [input selection structure.](https://developers.fireblocks.com/reference/transaction-objects#inputsselection) The inputs can be retrieved from the [Retrieve Unspent Inputs endpoint.](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid-assetid-unspent-inputs)\n\nFor `RAW` operations, add the key `rawMessageData` with the value set to the [raw message data structure.](https://developers.fireblocks.com/reference/raw-signing-objects#rawmessagedata)\n\nFor `CONTRACT_CALL` operations, add the key `contractCallData` with the value set to the Ethereum smart contract Application Binary Interface (ABI) payload. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n" + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions.", + "example": "abcdef" + }, + "autoStaking": { + "type": "boolean", + "description": "This feature is no longer supported." + }, + "networkStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + }, + "cpuStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the transaction." + }, + "status": { + "type": "string", + "description": "The primary status of the transaction. For details, see [Primary transaction statuses.] (https://developers.fireblocks.com/reference/primary-transaction-statuses)" + }, + "systemMessages": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "WARN", + "BLOCK" + ] + }, + "message": { + "type": "string", + "description": "A response from Fireblocks that communicates a message about the health of the process being performed. If this object is returned with data, you should expect potential delays or incomplete transaction statuses.", + "example": "Slow transaction processing. Outgoing transactions might be stuck." + } + } + } + } + }, + "description": "Create a new transaction.\n\nCreates a new transaction." + }, + { + "method": "post", + "path": "/transactions/estimate_fee", + "name": "transactions_estimate_fee_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "operation": { + "type": "string", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE" + ], + "description": "* `TRANSFER` - The default value for an operation. Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, to describe the transaction at your Fireblocks workspace.", + "example": "Ticket 123" + }, + "externalTxId": { + "type": "string", + "description": "An optional but highly recommended parameter. Fireblocks will reject future transactions with same ID. \n \nYou should set this to a unique ID representing the transaction, to avoid submitting the same transaction twice. This helps with cases where submitting the transaction responds with an error code due to Internet interruptions, but the transaction was actually sent and processed. To validate whether a transaction has been processed, [Find a specific transaction by external transaction ID](https://developers.fireblocks.com/reference/get_transactions-external-tx-id-externaltxid).\n \nThere is no specific format required for this parameter.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT` or `BURN` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset", + "example": "ETH" + }, + "source": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT", + "COMPOUND", + "GAS_STATION", + "ONE_TIME_ADDRESS", + "UNKNOWN", + "END_USER_WALLET" + ] + }, + "subType": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "BLINC", + "BYBIT", + "CIRCLE", + "COINBASEEXCHANGE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "GEMINI", + "HITBTC", + "HUOBI", + "INDEPENDENTRESERVE", + "KORBIT", + "KRAKEN", + "KRAKENINTL", + "KUCOIN", + "LIQUID", + "OKCOIN", + "OKEX", + "PAXOS", + "POLONIEX", + "External", + "Internal" + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "walletId": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "type" + ] + }, + "destination": {}, + "destinations": { + "type": "array", + "description": "For UTXO based blockchains, you can send a single transaction to multiple destinations.", + "items": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "destination": {} + } + } + }, + "amount": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "0.02" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 0.02 + } + ], + "description": "For `TRANSFER` operations, the requested amount to transfer, in the asset’s unit. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "\"When set to `true`, the fee will be deducted from the requested amount.\"\n\n**Note**: This parameter can only be considered if a transaction’s asset is a base asset, such as ETH or MATIC. If the asset can’t be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account." + }, + "forceSweep": { + "type": "boolean", + "description": "For Polkadot, Kusama and Westend transactions only. When set to true, Fireblocks will empty the asset wallet.\n\n **Note:** If set to true when the source account is exactly 1 DOT, the transaction will fail. Any amount more or less than 1 DOT succeeds. This is a Polkadot blockchain limitation." + }, + "feeLevel": { + "type": "string", + "enum": [ + "LOW", + "MEDIUM", + "HIGH" + ], + "description": "For UTXO or EVM-based blockchains only. Defines the blockchain fee level which will be payed for the transaction. Alternatively, specific fee estimation parameters exist below." + }, + "fee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For UTXO-based blockchains, the fee per bytes in the asset’s smallest unit (Satoshi, Latoshi, etc.). For Ripple, the fee for the transaction. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "priorityFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "2" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 2 + } + ], + "description": "For Ethereum-based blockchains only, the fee for EIP-1559 transaction pricing mechanism. Value is in Gwei. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "failOnLowFee": { + "type": "boolean", + "description": "When set to `true`, in case the current `MEDIUM` fee level is higher than the one specified in the transaction, the transaction will fail to avoid getting stuck with no confirmations." + }, + "maxFee": { + "description": "The maximum fee (gas price or fee per byte) that should be payed for the transaction. In case the current value of the requested `feeLevel` is higher than this requested maximum fee. Represented by a numeric string for accurate precision.", + "type": "string", + "example": "120" + }, + "gasLimit": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "21000" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 21000 + } + ], + "description": "For EVM-based blockchains only. Units of gas required to process the transaction. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "gasPrice": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For non-EIP-1559, EVM-based transactions. Price per gas unit (in Ethereum this is specified in Gwei). Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "networkFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For EVM-based blockchains only. The total transaction fee in the blockchain’s largest unit. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated. - The transaction blockchain fee.\n- For Ethereum, you can't pass gasPrice, gasLimit and networkFee all together.\n- A numeric value representation is required." + }, + "replaceTxByHash": { + "type": "string", + "description": "For EVM-based blockchains only. In case a transaction is stuck, specify the hash of the stuck transaction to replace it by this transaction with a higher fee, or to replace it with this transaction with a zero fee and drop it from the blockchain.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "extraParameters": { + "type": "object", + "properties": {}, + "description": "Additional protocol / operation specific key-value parameters:\n\nFor UTXO-based blockchain input selection, add the key `inputsSelection` with the value set the [input selection structure.](https://developers.fireblocks.com/reference/transaction-objects#inputsselection) The inputs can be retrieved from the [Retrieve Unspent Inputs endpoint.](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid-assetid-unspent-inputs)\n\nFor `RAW` operations, add the key `rawMessageData` with the value set to the [raw message data structure.](https://developers.fireblocks.com/reference/raw-signing-objects#rawmessagedata)\n\nFor `CONTRACT_CALL` operations, add the key `contractCallData` with the value set to the Ethereum smart contract Application Binary Interface (ABI) payload. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n" + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions.", + "example": "abcdef" + }, + "autoStaking": { + "type": "boolean", + "description": "This feature is no longer supported." + }, + "networkStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + }, + "cpuStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "low": { + "type": "object", + "properties": { + "feePerByte": { + "type": "string" + }, + "gasPrice": { + "type": "string" + }, + "gasLimit": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "baseFee": { + "description": "(optional) Base Fee according to EIP-1559 (ETH assets)", + "type": "string" + }, + "priorityFee": { + "description": "(optional) Priority Fee according to EIP-1559 (ETH assets)", + "type": "string" + } + } + }, + "medium": { + "type": "object", + "properties": { + "feePerByte": { + "type": "string" + }, + "gasPrice": { + "type": "string" + }, + "gasLimit": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "baseFee": { + "description": "(optional) Base Fee according to EIP-1559 (ETH assets)", + "type": "string" + }, + "priorityFee": { + "description": "(optional) Priority Fee according to EIP-1559 (ETH assets)", + "type": "string" + } + } + }, + "high": { + "type": "object", + "properties": { + "feePerByte": { + "type": "string" + }, + "gasPrice": { + "type": "string" + }, + "gasLimit": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "baseFee": { + "description": "(optional) Base Fee according to EIP-1559 (ETH assets)", + "type": "string" + }, + "priorityFee": { + "description": "(optional) Priority Fee according to EIP-1559 (ETH assets)", + "type": "string" + } + } + } + }, + "required": [ + "low", + "medium", + "high" + ] + }, + "description": "Estimate transaction fee.\n\nEstimates the transaction fee for a transaction request.\n* Note: Supports all Fireblocks assets except ZCash (ZEC)." + }, + { + "method": "get", + "path": "/transactions/{txId}", + "name": "transactions_getByTxid", + "parameters": [ + { + "type": "object", + "properties": { + "txId": { + "type": "string", + "minimum": 1, + "description": "The ID of the transaction to return" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the transaction." + }, + "externalTxId": { + "type": "string", + "description": "Unique transaction ID provided by the user. Fireblocks highly recommends setting an `externalTxId` for every transaction created, to avoid submitting the same transaction twice." + }, + "status": { + "type": "string", + "description": "The primary status of the transaction. For details, see [Primary transaction statuses](https://developers.fireblocks.com/reference/primary-transaction-statuses)." + }, + "subStatus": { + "type": "string", + "description": "See [Transaction substatuses](https://developers.fireblocks.com/reference/transaction-substatuses) for the list of transaction sub statuses." + }, + "txHash": { + "type": "string", + "description": "The hash of the transaction on the blockchain.\n * This parameter exists if at least one of the following conditions is met:\n\n 1. The transaction’s source type is `UNKNOWN`, `WHITELISTED_ADDRESS`, `NETWORK_CONNECTION`, `ONE_TIME_ADDRESS`, `FIAT_ACCOUNT` or `GAS_STATION`.\n\n 2. The transaction’s source type is `VAULT` and the status is either: `CONFIRMING`, `COMPLETED`, or was in any of these statuses prior to changing to `FAILED` or `REJECTED`. In some instances, transactions in status `BROADCASTING` will include the txHash as well.\n\n 3. The transaction’s source type is `EXCHANGE_ACCOUNT` and the transaction’s destination type is `VAULT`, and the status is either: `CONFIRMING`, `COMPLETED`, or was in any of these status prior to changing to `FAILED`.\n \n\n* In addition, the following conditions must be met:\n\n 1. The asset is a crypto asset (not fiat).\n\n 2. The transaction operation is not RAW or `TYPED_MESSAGE`." + }, + "operation": { + "type": "string", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE", + "ENABLE_ASSET", + "STAKE", + "UNSTAKE", + "WITHDRAW", + "REDEEM_FROM_COMPOUND", + "SUPPLY_TO_COMPOUND" + ], + "description": "* `TRANSFER` - Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n* `ENABLE_ASSET` - Algorand, DigitalBits, Solana, and Stellar require an on-chain transaction to create an asset wallet and enable the deposit address. This transaction is automatically created when adding assets on these blockchains at a vault account.\n* `STAKE` - Assign assets to a staking pool managed by a staking validator. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n* `UNSTAKE` - Remove assets from a staking pool managed by a staking validator. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n* `WITHDRAW` - Transfer assets from a dedicated staking vault account to another address. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n\n **Note:** Fireblocks will rename this type from `WITHDRAW` to a different type name soon. There will be a 7-day notice regarding the new type name.\n\n* `SUPPLY_TO_COMPOUND` - Deprecated since April 1st, 2023. Older transactions may have this as their operation, in case users in the workspace have used the direct integration between Fireblocks and the Compound DeFI protocol.\n* `REDEEM_FROM_COMPOUND` - Deprecated since April 1st, 2023. Older transactions may have this as their operation, in case users in the workspace have used the direct integration between Fireblocks and the Compound DeFI protocol.\n" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, that describes the transaction at your Fireblocks workspace." + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT`, `BURN`, `ENABLE_ASSET`,`STAKE` ,`UNSTAKE` or `WITHDRAW` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset" + }, + "source": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name. In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "sourceAddress": { + "type": "string", + "description": "For account based assets only, the source address of the transaction.\n**Note:** If the status is `CONFIRMING`, `COMPLETED`, or has been `CONFIRMING`; then moved forward to `FAILED` or `REJECTED`, then this parameter will contain the source address. In any other case, this parameter will be empty." + }, + "tag": { + "type": "string", + "description": "Source address tag for XRP, used as memo for EOS/XLM, or Bank Transfer Description for the fiat provider BLINC (by BCB Group)." + }, + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destinations": { + "type": "array", + "description": "The transaction’s destinations.\n**Note:** In case the transaction is sent to a single destination, the `destination` parameter is used instead of this.", + "items": { + "type": "object", + "properties": { + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destinationAddress": { + "description": "Address where the asset was transferred." + }, + "destinationAddressDescription": { + "description": "Description of the address." + }, + "amount": { + "type": "string", + "description": "The amount to be sent to this destination." + }, + "amountUSD": { + "type": "string", + "description": "The USD value of the requested amount." + }, + "amlScreeningResult": { + "type": "object", + "description": "The result of the AML screening.", + "properties": { + "provider": { + "type": "string" + }, + "payload": { + "type": "object" + } + } + }, + "customerRefId": { + "description": "The ID for AML providers to associate the owner of funds with transactions." + }, + "authorizationInfo": { + "type": "object", + "description": "The information about your [Transaction Authorization Policy (TAP).](https://developers.fireblocks.com/docs/capabilities#transaction-authorization-policy-tap)", + "properties": { + "allowOperatorAsAuthorizer": { + "type": "boolean" + }, + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "th": { + "type": "number" + }, + "users": { + "type": "object", + "additionalProperties": { + "type": "string", + "enum": [ + "PENDING_AUTHORIZATION", + "APPROVED", + "REJECTED", + "NA" + ] + } + } + } + } + } + } + } + } + } + }, + "destinationAddress": { + "type": "string", + "description": "Address where the asset were transferred.\nNotes:\n - For [Multi destination transactions](https://support.fireblocks.io/hc/en-us/articles/360018447980-Multi-destination-transactions), this parameter will be empty. In this case, you should refer to the destinations field.\n - If the status is `CONFIRMING`, `COMPLETED`, or has been `CONFIRMING`; then moved forward to `FAILED` or `REJECTED`, then this parameter will contain the destination address. In any other case, this parameter will be empty." + }, + "destinationAddressDescription": { + "type": "string", + "description": "Description of the address." + }, + "destinationTag": { + "type": "string", + "description": "Destination address tag for XRP, used as memo for EOS/XLM, or Bank Transfer Description for the fiat provider BLINC (by BCB Group)." + }, + "contractCallDecodedData": { + "description": "Decoded data for `CONTRACT_CALL` operations. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for setting this parameter's value.", + "type": "object", + "properties": { + "contractName": { + "type": "string" + }, + "functionCalls": { + "type": "array", + "items": { + "type": "object" + } + } + } + }, + "amountInfo": { + "type": "object", + "description": "The details of the requested amount to transfer.", + "properties": { + "amount": { + "description": "If the transfer is a withdrawal from an exchange, the actual amount that was requested to be transferred. Otherwise, the requested amount.", + "type": "string" + }, + "requestedAmount": { + "description": "The amount requested by the user.", + "type": "string" + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction.", + "type": "string" + }, + "amountUSD": { + "description": "The USD value of the requested amount.", + "type": "string" + } + } + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "For transactions initiated via this Fireblocks workspace, when set to `true`, the fee is deducted from the requested amount.\n\n**Note**: This parameter can only be considered if a transaction's asset is a base asset, such as ETH or MATIC. If the asset can't be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account." + }, + "feeInfo": { + "type": "object", + "description": "Details of the transaction's fee.", + "properties": { + "networkFee": { + "description": "The fee paid to the network", + "type": "string" + }, + "serviceFee": { + "description": "The total fee deducted by the exchange from the actual requested amount (serviceFee = amount - netAmount)", + "type": "string" + }, + "gasPrice": { + "type": "string" + } + } + }, + "feeCurrency": { + "type": "string", + "description": "The asset which was withdrawn to pay the transaction fee, for example ETH for EVM-based blockchains, BTC for Tether Omni." + }, + "networkRecords": { + "type": "array", + "description": "In case a single transaction resulted with multiple transfers, for example a result of a contract call, then this parameter specifies each transfer that took place on the blockchain. In case of a single transfer transaction, this parameter is empty.", + "items": { + "type": "object", + "properties": { + "source": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name. In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "txHash": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset" + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction", + "type": "string" + }, + "isDropped": { + "type": "boolean" + }, + "type": { + "type": "string" + }, + "destinationAddress": { + "type": "string" + }, + "sourceAddress": { + "type": "string" + }, + "amountUSD": { + "type": "string" + }, + "index": { + "type": "number" + }, + "rewardInfo": { + "type": "object", + "description": "This field is relevant only for Algorand transactions. Both `srcRewards` and `destRewards` will appear only for Vault to Vault transactions, otherwise you will receive only the Fireblocks’ side of the transaction.", + "properties": { + "srcRewards": { + "type": "string" + }, + "destRewards": { + "type": "string" + } + } + } + } + } + }, + "createdAt": { + "type": "number", + "description": "The transaction’s creation date and time, in unix timestamp." + }, + "lastUpdated": { + "type": "number", + "description": "The transaction’s last update date and time, in unix timestamp." + }, + "createdBy": { + "type": "string", + "description": "User ID of the initiator of the transaction." + }, + "signedBy": { + "type": "array", + "description": "User ID’s of the signers of the transaction.", + "items": { + "type": "string" + } + }, + "rejectedBy": { + "type": "string", + "description": "User ID of the user that rejected the transaction (in case it was rejected)." + }, + "authorizationInfo": { + "type": "object", + "description": "The information about your [Transaction Authorization Policy (TAP).](https://developers.fireblocks.com/docs/capabilities#transaction-authorization-policy-tap)", + "properties": { + "allowOperatorAsAuthorizer": { + "type": "boolean" + }, + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "th": { + "type": "number" + }, + "users": { + "type": "object", + "additionalProperties": { + "type": "string", + "enum": [ + "PENDING_AUTHORIZATION", + "APPROVED", + "REJECTED", + "NA" + ] + } + } + } + } + } + } + }, + "exchangeTxId": { + "type": "string", + "description": "If the transaction originated from an exchange, this is the ID of this transaction at the exchange." + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions." + }, + "amlScreeningResult": { + "type": "object", + "description": "The result of the AML screening.", + "properties": { + "provider": { + "type": "string" + }, + "payload": { + "type": "object" + } + } + }, + "extraParameters": { + "type": "object", + "properties": {}, + "description": "Additional protocol / operation specific key-value parameters:\n\nFor UTXO-based blockchain input selection, add the key `inputsSelection` with the value set the [input selection structure.](https://developers.fireblocks.com/reference/transaction-objects#inputsselection) The inputs can be retrieved from the [Retrieve Unspent Inputs endpoint.](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid-assetid-unspent-inputs)\n\nFor `RAW` operations, add the key `rawMessageData` with the value set to the [raw message data structure.](https://developers.fireblocks.com/reference/raw-signing-objects#rawmessagedata)\n\nFor `CONTRACT_CALL` operations, add the key `contractCallData` with the value set to the Ethereum smart contract Application Binary Interface (ABI) payload. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n" + }, + "signedMessages": { + "type": "object", + "description": "A list of signed messages returned for raw signing.", + "properties": { + "content": { + "type": "string" + }, + "algorithm": { + "type": "string", + "enum": [ + "MPC_ECDSA_SECP256K1", + "MPC_EDDSA_ED25519" + ] + }, + "derivationPath": { + "type": "array", + "items": { + "type": "number" + } + }, + "signature": { + "type": "object", + "properties": { + "fullSig": { + "type": "string" + }, + "r": { + "type": "string" + }, + "s": { + "type": "string" + }, + "v": { + "type": "number" + } + } + }, + "publicKey": { + "type": "string" + } + } + }, + "numOfConfirmations": { + "type": "number", + "description": "The number of confirmations of the transaction. The number will increase until the transaction will be considered completed according to the confirmation policy." + }, + "blockInfo": { + "type": "object", + "description": "The block hash and height of the block that this transaction was mined in.\n **Note**: If an outgoing transaction uses the destinations object with more than one value in the array, blockHash is set to null.", + "properties": { + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + } + } + }, + "index": { + "type": "number", + "description": "For UTXO based assets this is the vOut, for Ethereum based, this is the index of the event of the contract call.\n **Note:** This field is not returned if a transaction uses the `destinations` object with more than one value." + }, + "rewardInfo": { + "type": "object", + "description": "This field is relevant only for Algorand transactions. Both `srcRewards` and `destRewards` will appear only for Vault to Vault transactions, otherwise you will receive only the Fireblocks’ side of the transaction.", + "properties": { + "srcRewards": { + "type": "string" + }, + "destRewards": { + "type": "string" + } + } + }, + "systemMessages": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "WARN", + "BLOCK" + ] + }, + "message": { + "type": "string", + "description": "A response from Fireblocks that communicates a message about the health of the process being performed. If this object is returned with data, you should expect potential delays or incomplete transaction statuses.", + "example": "Slow transaction processing. Outgoing transactions might be stuck." + } + } + }, + "addressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME" + ] + }, + "requestedAmount": { + "description": "The amount requested by the user. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "amount": { + "description": "If the transfer is a withdrawal from an exchange, the actual amount that was requested to be transferred. Otherwise, the requested amount. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "amountUSD": { + "description": "The USD value of the requested amount. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "nullable": true, + "deprecated": true + }, + "serviceFee": { + "description": "The total fee deducted by the exchange from the actual requested amount (`serviceFee` = `amount` - `netAmount`). Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "fee": { + "description": "Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "networkFee": { + "description": "The fee paid to the network. Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + } + } + }, + "description": "Find a specific transaction by Fireblocks transaction ID.\n\nReturns a transaction by ID." + }, + { + "method": "get", + "path": "/transactions/external_tx_id/{externalTxId}/", + "name": "transactions_external_tx_id_getByExternaltxid", + "parameters": [ + { + "type": "object", + "properties": { + "externalTxId": { + "type": "string", + "minimum": 1, + "description": "The external ID of the transaction to return" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the transaction." + }, + "externalTxId": { + "type": "string", + "description": "Unique transaction ID provided by the user. Fireblocks highly recommends setting an `externalTxId` for every transaction created, to avoid submitting the same transaction twice." + }, + "status": { + "type": "string", + "description": "The primary status of the transaction. For details, see [Primary transaction statuses](https://developers.fireblocks.com/reference/primary-transaction-statuses)." + }, + "subStatus": { + "type": "string", + "description": "See [Transaction substatuses](https://developers.fireblocks.com/reference/transaction-substatuses) for the list of transaction sub statuses." + }, + "txHash": { + "type": "string", + "description": "The hash of the transaction on the blockchain.\n * This parameter exists if at least one of the following conditions is met:\n\n 1. The transaction’s source type is `UNKNOWN`, `WHITELISTED_ADDRESS`, `NETWORK_CONNECTION`, `ONE_TIME_ADDRESS`, `FIAT_ACCOUNT` or `GAS_STATION`.\n\n 2. The transaction’s source type is `VAULT` and the status is either: `CONFIRMING`, `COMPLETED`, or was in any of these statuses prior to changing to `FAILED` or `REJECTED`. In some instances, transactions in status `BROADCASTING` will include the txHash as well.\n\n 3. The transaction’s source type is `EXCHANGE_ACCOUNT` and the transaction’s destination type is `VAULT`, and the status is either: `CONFIRMING`, `COMPLETED`, or was in any of these status prior to changing to `FAILED`.\n \n\n* In addition, the following conditions must be met:\n\n 1. The asset is a crypto asset (not fiat).\n\n 2. The transaction operation is not RAW or `TYPED_MESSAGE`." + }, + "operation": { + "type": "string", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE", + "ENABLE_ASSET", + "STAKE", + "UNSTAKE", + "WITHDRAW", + "REDEEM_FROM_COMPOUND", + "SUPPLY_TO_COMPOUND" + ], + "description": "* `TRANSFER` - Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n* `ENABLE_ASSET` - Algorand, DigitalBits, Solana, and Stellar require an on-chain transaction to create an asset wallet and enable the deposit address. This transaction is automatically created when adding assets on these blockchains at a vault account.\n* `STAKE` - Assign assets to a staking pool managed by a staking validator. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n* `UNSTAKE` - Remove assets from a staking pool managed by a staking validator. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n* `WITHDRAW` - Transfer assets from a dedicated staking vault account to another address. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n\n **Note:** Fireblocks will rename this type from `WITHDRAW` to a different type name soon. There will be a 7-day notice regarding the new type name.\n\n* `SUPPLY_TO_COMPOUND` - Deprecated since April 1st, 2023. Older transactions may have this as their operation, in case users in the workspace have used the direct integration between Fireblocks and the Compound DeFI protocol.\n* `REDEEM_FROM_COMPOUND` - Deprecated since April 1st, 2023. Older transactions may have this as their operation, in case users in the workspace have used the direct integration between Fireblocks and the Compound DeFI protocol.\n" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, that describes the transaction at your Fireblocks workspace." + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT`, `BURN`, `ENABLE_ASSET`,`STAKE` ,`UNSTAKE` or `WITHDRAW` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset" + }, + "source": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name. In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "sourceAddress": { + "type": "string", + "description": "For account based assets only, the source address of the transaction.\n**Note:** If the status is `CONFIRMING`, `COMPLETED`, or has been `CONFIRMING`; then moved forward to `FAILED` or `REJECTED`, then this parameter will contain the source address. In any other case, this parameter will be empty." + }, + "tag": { + "type": "string", + "description": "Source address tag for XRP, used as memo for EOS/XLM, or Bank Transfer Description for the fiat provider BLINC (by BCB Group)." + }, + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destinations": { + "type": "array", + "description": "The transaction’s destinations.\n**Note:** In case the transaction is sent to a single destination, the `destination` parameter is used instead of this.", + "items": { + "type": "object", + "properties": { + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destinationAddress": { + "description": "Address where the asset was transferred." + }, + "destinationAddressDescription": { + "description": "Description of the address." + }, + "amount": { + "type": "string", + "description": "The amount to be sent to this destination." + }, + "amountUSD": { + "type": "string", + "description": "The USD value of the requested amount." + }, + "amlScreeningResult": { + "type": "object", + "description": "The result of the AML screening.", + "properties": { + "provider": { + "type": "string" + }, + "payload": { + "type": "object" + } + } + }, + "customerRefId": { + "description": "The ID for AML providers to associate the owner of funds with transactions." + }, + "authorizationInfo": { + "type": "object", + "description": "The information about your [Transaction Authorization Policy (TAP).](https://developers.fireblocks.com/docs/capabilities#transaction-authorization-policy-tap)", + "properties": { + "allowOperatorAsAuthorizer": { + "type": "boolean" + }, + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "th": { + "type": "number" + }, + "users": { + "type": "object", + "additionalProperties": { + "type": "string", + "enum": [ + "PENDING_AUTHORIZATION", + "APPROVED", + "REJECTED", + "NA" + ] + } + } + } + } + } + } + } + } + } + }, + "destinationAddress": { + "type": "string", + "description": "Address where the asset were transferred.\nNotes:\n - For [Multi destination transactions](https://support.fireblocks.io/hc/en-us/articles/360018447980-Multi-destination-transactions), this parameter will be empty. In this case, you should refer to the destinations field.\n - If the status is `CONFIRMING`, `COMPLETED`, or has been `CONFIRMING`; then moved forward to `FAILED` or `REJECTED`, then this parameter will contain the destination address. In any other case, this parameter will be empty." + }, + "destinationAddressDescription": { + "type": "string", + "description": "Description of the address." + }, + "destinationTag": { + "type": "string", + "description": "Destination address tag for XRP, used as memo for EOS/XLM, or Bank Transfer Description for the fiat provider BLINC (by BCB Group)." + }, + "contractCallDecodedData": { + "description": "Decoded data for `CONTRACT_CALL` operations. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for setting this parameter's value.", + "type": "object", + "properties": { + "contractName": { + "type": "string" + }, + "functionCalls": { + "type": "array", + "items": { + "type": "object" + } + } + } + }, + "amountInfo": { + "type": "object", + "description": "The details of the requested amount to transfer.", + "properties": { + "amount": { + "description": "If the transfer is a withdrawal from an exchange, the actual amount that was requested to be transferred. Otherwise, the requested amount.", + "type": "string" + }, + "requestedAmount": { + "description": "The amount requested by the user.", + "type": "string" + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction.", + "type": "string" + }, + "amountUSD": { + "description": "The USD value of the requested amount.", + "type": "string" + } + } + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "For transactions initiated via this Fireblocks workspace, when set to `true`, the fee is deducted from the requested amount.\n\n**Note**: This parameter can only be considered if a transaction's asset is a base asset, such as ETH or MATIC. If the asset can't be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account." + }, + "feeInfo": { + "type": "object", + "description": "Details of the transaction's fee.", + "properties": { + "networkFee": { + "description": "The fee paid to the network", + "type": "string" + }, + "serviceFee": { + "description": "The total fee deducted by the exchange from the actual requested amount (serviceFee = amount - netAmount)", + "type": "string" + }, + "gasPrice": { + "type": "string" + } + } + }, + "feeCurrency": { + "type": "string", + "description": "The asset which was withdrawn to pay the transaction fee, for example ETH for EVM-based blockchains, BTC for Tether Omni." + }, + "networkRecords": { + "type": "array", + "description": "In case a single transaction resulted with multiple transfers, for example a result of a contract call, then this parameter specifies each transfer that took place on the blockchain. In case of a single transfer transaction, this parameter is empty.", + "items": { + "type": "object", + "properties": { + "source": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name. In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "txHash": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset" + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction", + "type": "string" + }, + "isDropped": { + "type": "boolean" + }, + "type": { + "type": "string" + }, + "destinationAddress": { + "type": "string" + }, + "sourceAddress": { + "type": "string" + }, + "amountUSD": { + "type": "string" + }, + "index": { + "type": "number" + }, + "rewardInfo": { + "type": "object", + "description": "This field is relevant only for Algorand transactions. Both `srcRewards` and `destRewards` will appear only for Vault to Vault transactions, otherwise you will receive only the Fireblocks’ side of the transaction.", + "properties": { + "srcRewards": { + "type": "string" + }, + "destRewards": { + "type": "string" + } + } + } + } + } + }, + "createdAt": { + "type": "number", + "description": "The transaction’s creation date and time, in unix timestamp." + }, + "lastUpdated": { + "type": "number", + "description": "The transaction’s last update date and time, in unix timestamp." + }, + "createdBy": { + "type": "string", + "description": "User ID of the initiator of the transaction." + }, + "signedBy": { + "type": "array", + "description": "User ID’s of the signers of the transaction.", + "items": { + "type": "string" + } + }, + "rejectedBy": { + "type": "string", + "description": "User ID of the user that rejected the transaction (in case it was rejected)." + }, + "authorizationInfo": { + "type": "object", + "description": "The information about your [Transaction Authorization Policy (TAP).](https://developers.fireblocks.com/docs/capabilities#transaction-authorization-policy-tap)", + "properties": { + "allowOperatorAsAuthorizer": { + "type": "boolean" + }, + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "th": { + "type": "number" + }, + "users": { + "type": "object", + "additionalProperties": { + "type": "string", + "enum": [ + "PENDING_AUTHORIZATION", + "APPROVED", + "REJECTED", + "NA" + ] + } + } + } + } + } + } + }, + "exchangeTxId": { + "type": "string", + "description": "If the transaction originated from an exchange, this is the ID of this transaction at the exchange." + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions." + }, + "amlScreeningResult": { + "type": "object", + "description": "The result of the AML screening.", + "properties": { + "provider": { + "type": "string" + }, + "payload": { + "type": "object" + } + } + }, + "extraParameters": { + "type": "object", + "properties": {}, + "description": "Additional protocol / operation specific key-value parameters:\n\nFor UTXO-based blockchain input selection, add the key `inputsSelection` with the value set the [input selection structure.](https://developers.fireblocks.com/reference/transaction-objects#inputsselection) The inputs can be retrieved from the [Retrieve Unspent Inputs endpoint.](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid-assetid-unspent-inputs)\n\nFor `RAW` operations, add the key `rawMessageData` with the value set to the [raw message data structure.](https://developers.fireblocks.com/reference/raw-signing-objects#rawmessagedata)\n\nFor `CONTRACT_CALL` operations, add the key `contractCallData` with the value set to the Ethereum smart contract Application Binary Interface (ABI) payload. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n" + }, + "signedMessages": { + "type": "object", + "description": "A list of signed messages returned for raw signing.", + "properties": { + "content": { + "type": "string" + }, + "algorithm": { + "type": "string", + "enum": [ + "MPC_ECDSA_SECP256K1", + "MPC_EDDSA_ED25519" + ] + }, + "derivationPath": { + "type": "array", + "items": { + "type": "number" + } + }, + "signature": { + "type": "object", + "properties": { + "fullSig": { + "type": "string" + }, + "r": { + "type": "string" + }, + "s": { + "type": "string" + }, + "v": { + "type": "number" + } + } + }, + "publicKey": { + "type": "string" + } + } + }, + "numOfConfirmations": { + "type": "number", + "description": "The number of confirmations of the transaction. The number will increase until the transaction will be considered completed according to the confirmation policy." + }, + "blockInfo": { + "type": "object", + "description": "The block hash and height of the block that this transaction was mined in.\n **Note**: If an outgoing transaction uses the destinations object with more than one value in the array, blockHash is set to null.", + "properties": { + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + } + } + }, + "index": { + "type": "number", + "description": "For UTXO based assets this is the vOut, for Ethereum based, this is the index of the event of the contract call.\n **Note:** This field is not returned if a transaction uses the `destinations` object with more than one value." + }, + "rewardInfo": { + "type": "object", + "description": "This field is relevant only for Algorand transactions. Both `srcRewards` and `destRewards` will appear only for Vault to Vault transactions, otherwise you will receive only the Fireblocks’ side of the transaction.", + "properties": { + "srcRewards": { + "type": "string" + }, + "destRewards": { + "type": "string" + } + } + }, + "systemMessages": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "WARN", + "BLOCK" + ] + }, + "message": { + "type": "string", + "description": "A response from Fireblocks that communicates a message about the health of the process being performed. If this object is returned with data, you should expect potential delays or incomplete transaction statuses.", + "example": "Slow transaction processing. Outgoing transactions might be stuck." + } + } + }, + "addressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME" + ] + }, + "requestedAmount": { + "description": "The amount requested by the user. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "amount": { + "description": "If the transfer is a withdrawal from an exchange, the actual amount that was requested to be transferred. Otherwise, the requested amount. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "amountUSD": { + "description": "The USD value of the requested amount. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "nullable": true, + "deprecated": true + }, + "serviceFee": { + "description": "The total fee deducted by the exchange from the actual requested amount (`serviceFee` = `amount` - `netAmount`). Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "fee": { + "description": "Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "networkFee": { + "description": "The fee paid to the network. Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + } + } + }, + "description": "Find a specific transaction by external transaction ID.\n\nReturns transaction by external transaction ID." + }, + { + "method": "post", + "path": "/transactions/{txId}/set_confirmation_threshold", + "name": "transactions_set_confirmation_threshold_postByTxid", + "parameters": [ + { + "type": "object", + "properties": { + "txId": { + "type": "string", + "minimum": 1, + "description": "The ID of the transaction" + }, + "body": { + "type": "object", + "properties": { + "numOfConfirmations": { + "type": "number" + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "transactions": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "Set confirmation threshold by transaction ID.\n\nOverrides the required number of confirmations for transaction completion by transaction ID." + }, + { + "method": "post", + "path": "/transactions/{txId}/drop", + "name": "transactions_drop_postByTxid", + "parameters": [ + { + "type": "object", + "properties": { + "txId": { + "type": "string", + "minimum": 1, + "description": "The ID of the transaction" + }, + "body": { + "type": "object", + "properties": { + "txId": { + "type": "string" + }, + "feeLevel": { + "type": "string" + }, + "gasPrice": { + "type": "string" + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "transactions": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "Drop ETH transaction by ID.\n\nDrops a stuck ETH transaction and creates a replacement transaction." + }, + { + "method": "post", + "path": "/transactions/{txId}/cancel", + "name": "transactions_cancel_postByTxid", + "parameters": [ + { + "type": "object", + "properties": { + "txId": { + "type": "string", + "minimum": 1, + "description": "The ID of the transaction to cancel" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + } + } + }, + "description": "Cancel a transaction.\n\nCancels a transaction by ID." + }, + { + "method": "post", + "path": "/transactions/{txId}/freeze", + "name": "transactions_freeze_postByTxid", + "parameters": [ + { + "type": "object", + "properties": { + "txId": { + "type": "string", + "minimum": 1, + "description": "The ID of the transaction to freeze" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + } + } + }, + "description": "Freeze a transaction.\n\nFreezes a transaction by ID." + }, + { + "method": "post", + "path": "/transactions/{txId}/unfreeze", + "name": "transactions_unfreeze_postByTxid", + "parameters": [ + { + "type": "object", + "properties": { + "txId": { + "type": "string", + "minimum": 1, + "description": "The ID of the transaction to unfreeze" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + } + } + }, + "description": "Unfreeze a transaction.\n\nUnfreezes a transaction by ID and makes the transaction available again." + }, + { + "method": "post", + "path": "/txHash/{txHash}/set_confirmation_threshold", + "name": "txHash_set_confirmation_threshold_postByTxhash", + "parameters": [ + { + "type": "object", + "properties": { + "txHash": { + "type": "string", + "minimum": 1, + "description": "The TxHash" + }, + "body": { + "type": "object", + "properties": { + "numOfConfirmations": { + "type": "number" + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "transactions": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "Set confirmation threshold by transaction hash.\n\nOverrides the required number of confirmations for transaction completion by transaction hash." + }, + { + "method": "get", + "path": "/payments/xb-settlements/configs", + "name": "payments_xb_settlements_configs_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "properties": { + "configurations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "corridorId": { + "type": "string", + "enum": [ + "MX_US", + "CO_US", + "US_MX", + "US_EU", + "US_UK" + ], + "description": "- MX_US : Mexico (MXN) to USA (USD)\n- CO_US : Colombia (COP) to USA (USD)\n- US_MX : USA (USD) to Mexico (MXN)\n- US_EU : USA (USD) to Europe Union (EUR)\n- US_UK : USA (USD) to United Kingdon (GBP)\n" + }, + "name": { + "type": "string", + "description": "The name for the cross-border ettlement configuration" + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAssetId": {}, + "outputAssetId": {} + }, + "required": [ + "accountId" + ] + } + }, + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + }, + "createdAt": { + "type": "number", + "description": "The creation time in epoch format." + } + }, + "required": [ + "configId", + "name", + "corridorId", + "steps", + "conversionSlippageBasisPoints", + "createdAt" + ] + } + } + }, + "required": [ + "configurations" + ] + }, + "description": "Get all the cross-border settlement configurations.
\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "post", + "path": "/payments/xb-settlements/configs", + "name": "payments_xb_settlements_configs_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name for the cross-border settlement configuration" + }, + "corridorId": { + "type": "string", + "enum": [ + "MX_US", + "CO_US", + "US_MX", + "US_EU", + "US_UK" + ], + "description": "- MX_US : Mexico (MXN) to USA (USD)\n- CO_US : Colombia (COP) to USA (USD)\n- US_MX : USA (USD) to Mexico (MXN)\n- US_EU : USA (USD) to Europe Union (EUR)\n- US_UK : USA (USD) to United Kingdon (GBP)\n" + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAssetId": {}, + "outputAssetId": {} + }, + "required": [ + "accountId" + ] + } + }, + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + } + }, + "required": [ + "name", + "corridorId", + "steps" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "corridorId": { + "type": "string", + "enum": [ + "MX_US", + "CO_US", + "US_MX", + "US_EU", + "US_UK" + ], + "description": "- MX_US : Mexico (MXN) to USA (USD)\n- CO_US : Colombia (COP) to USA (USD)\n- US_MX : USA (USD) to Mexico (MXN)\n- US_EU : USA (USD) to Europe Union (EUR)\n- US_UK : USA (USD) to United Kingdon (GBP)\n" + }, + "name": { + "type": "string", + "description": "The name for the cross-border ettlement configuration" + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAssetId": {}, + "outputAssetId": {} + }, + "required": [ + "accountId" + ] + } + }, + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + }, + "createdAt": { + "type": "number", + "description": "The creation time in epoch format." + } + }, + "required": [ + "configId", + "name", + "corridorId", + "steps", + "conversionSlippageBasisPoints", + "createdAt" + ] + }, + "description": "Create a new cross-border settlement configuration.\n\nCreate a new cross-border settlement configuration.
Configurations define the default assets, on-ramps, and off-ramps to use for the cross-border settlement.
\nA configuration must contain at least two steps - `ON_RAMP` and `VAULT_ACCOUNT`.
\nAll other steps (e.g., `OFF_RAMP`, `FIAT_DESTINATION`, etc.) are optional.
\nEvery step must include the `accountId` to be used, while `inputAssetId` and `outputAssetId` are optional. \nIf those are not provided, a default value will be used from the Corridor Settings.
\nIf the inputAssetId or the outputAssetId is provided for one of the objects, all assets in the objects must be consistent. For example, if the output asset of ON_RAMP is XLM_USDC_5F3T, then the input asset of the VAULT_ACCOUNT must also be XLM_USDC_5F3T..
\nYou can set a slippage amount for your configuration. Slippage is defined by basis points (bps). This value can be overloaded on execution. If you do not configure a slippage amount, the default slippage of 10000 bps (10%) is used.
\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "get", + "path": "/payments/xb-settlements/configs/{configId}", + "name": "payments_xb_settlements_configs_getByConfigid", + "parameters": [ + { + "type": "object", + "properties": { + "configId": { + "type": "string", + "description": "The cross-border settlement configuration ID." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "corridorId": { + "type": "string", + "enum": [ + "MX_US", + "CO_US", + "US_MX", + "US_EU", + "US_UK" + ], + "description": "- MX_US : Mexico (MXN) to USA (USD)\n- CO_US : Colombia (COP) to USA (USD)\n- US_MX : USA (USD) to Mexico (MXN)\n- US_EU : USA (USD) to Europe Union (EUR)\n- US_UK : USA (USD) to United Kingdon (GBP)\n" + }, + "name": { + "type": "string", + "description": "The name for the cross-border ettlement configuration" + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAssetId": {}, + "outputAssetId": {} + }, + "required": [ + "accountId" + ] + } + }, + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + }, + "createdAt": { + "type": "number", + "description": "The creation time in epoch format." + } + }, + "required": [ + "configId", + "name", + "corridorId", + "steps", + "conversionSlippageBasisPoints", + "createdAt" + ] + }, + "description": "Get a specific cross-border settlement configuration.
\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "put", + "path": "/payments/xb-settlements/configs/{configId}", + "name": "payments_xb_settlements_configs_putByConfigid", + "parameters": [ + { + "type": "object", + "properties": { + "configId": { + "type": "string", + "description": "The cross-border settlement configuration ID." + }, + "body": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name for the cross-border settlement configuration" + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAssetId": {}, + "outputAssetId": {} + }, + "required": [ + "accountId" + ] + } + }, + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + } + }, + "required": [ + "name", + "steps" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "corridorId": { + "type": "string", + "enum": [ + "MX_US", + "CO_US", + "US_MX", + "US_EU", + "US_UK" + ], + "description": "- MX_US : Mexico (MXN) to USA (USD)\n- CO_US : Colombia (COP) to USA (USD)\n- US_MX : USA (USD) to Mexico (MXN)\n- US_EU : USA (USD) to Europe Union (EUR)\n- US_UK : USA (USD) to United Kingdon (GBP)\n" + }, + "name": { + "type": "string", + "description": "The name for the cross-border ettlement configuration" + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAssetId": {}, + "outputAssetId": {} + }, + "required": [ + "accountId" + ] + } + }, + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + }, + "createdAt": { + "type": "number", + "description": "The creation time in epoch format." + } + }, + "required": [ + "configId", + "name", + "corridorId", + "steps", + "conversionSlippageBasisPoints", + "createdAt" + ] + }, + "description": "Edit a cross-border settlement configuration.\nEditing a configuration does not affect previously executed flows that used the configuration.\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "delete", + "path": "/payments/xb-settlements/configs/{configId}", + "name": "payments_xb_settlements_configs_eraseByConfigid", + "parameters": [ + { + "type": "object", + "properties": { + "configId": { + "type": "string", + "description": "The cross-border settlement configuration ID." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "corridorId": { + "type": "string", + "enum": [ + "MX_US", + "CO_US", + "US_MX", + "US_EU", + "US_UK" + ], + "description": "- MX_US : Mexico (MXN) to USA (USD)\n- CO_US : Colombia (COP) to USA (USD)\n- US_MX : USA (USD) to Mexico (MXN)\n- US_EU : USA (USD) to Europe Union (EUR)\n- US_UK : USA (USD) to United Kingdon (GBP)\n" + }, + "name": { + "type": "string", + "description": "The name for the cross-border ettlement configuration" + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAssetId": {}, + "outputAssetId": {} + }, + "required": [ + "accountId" + ] + } + }, + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + }, + "createdAt": { + "type": "number", + "description": "The creation time in epoch format." + } + }, + "required": [ + "configId", + "name", + "corridorId", + "steps", + "conversionSlippageBasisPoints", + "createdAt" + ] + }, + "description": "Delete a cross-border settlement configuration.\nThis does not delete or remove previously executed flows that used this configuration.\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "post", + "path": "/payments/xb-settlements/flows", + "name": "payments_xb_settlements_flows_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "amount": { + "type": "string", + "description": "The amount to transfer in this cross-border flow. The type of asset is defined by the cross-border settlement configuration." + } + }, + "required": [ + "configId", + "amount" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "flowId": { + "type": "string", + "description": "The unique id for the cross-border flow." + }, + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "conversionRate": { + "type": "string", + "description": "The conversion rate received from the on-ramp or off-ramp." + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "estimatedOutputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "totalEstimatedFee": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "totalEstimatedTime": { + "type": "number", + "description": "The total *estimated* time for executing the cross-border flow." + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "outputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "estimatedFeeAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "estimatedTime": { + "type": "number", + "description": "The estimated time for executing the step." + }, + "isSignRequired": { + "type": "boolean", + "description": "Whether or not signing is required for executing the step." + } + }, + "required": [ + "accountId", + "inputAmount", + "outputAmount", + "estimatedFeeAmount", + "estimatedTime", + "isSignRequired" + ] + } + } + }, + "required": [ + "flowId", + "configId", + "steps", + "inputAmount", + "estimatedOutputAmount", + "totalEstimatedFee", + "totalEstimatedTime", + "conversionRate" + ] + }, + "description": "Create a new cross-border settlement flow.\n\nCreate a cross-border flow (based on a cross-border configuration) with an amount to transfer. \nThe assetId is defined by the cross-border configuration.\nCreating a flow triggers a calculation of the flow estimations, including FX rates, times, and fees based on the amount provided.\nCreating a cross-border flow will not execute the flow.\n\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "get", + "path": "/payments/xb-settlements/flows/{flowId}", + "name": "payments_xb_settlements_flows_getByFlowid", + "parameters": [ + { + "type": "object", + "properties": { + "flowId": { + "type": "string", + "description": "The cross-border settlement flow ID." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "preview": { + "type": "object", + "properties": { + "flowId": { + "type": "string", + "description": "The unique id for the cross-border flow." + }, + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "conversionRate": { + "type": "string", + "description": "The conversion rate received from the on-ramp or off-ramp." + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "estimatedOutputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "totalEstimatedFee": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "totalEstimatedTime": { + "type": "number", + "description": "The total *estimated* time for executing the cross-border flow." + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "outputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "estimatedFeeAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "estimatedTime": { + "type": "number", + "description": "The estimated time for executing the step." + }, + "isSignRequired": { + "type": "boolean", + "description": "Whether or not signing is required for executing the step." + } + }, + "required": [ + "accountId", + "inputAmount", + "outputAmount", + "estimatedFeeAmount", + "estimatedTime", + "isSignRequired" + ] + } + } + }, + "required": [ + "flowId", + "configId", + "steps", + "inputAmount", + "estimatedOutputAmount", + "totalEstimatedFee", + "totalEstimatedTime", + "conversionRate" + ] + }, + "execution": { + "type": "object", + "properties": { + "flowId": { + "type": "string", + "description": "The unique id for the cross-border flow." + }, + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "outputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "totalFee": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "initiatedAt": { + "type": "number", + "description": "The time the cross-border flow executed in epoch format." + }, + "initiatedBy": { + "description": "The id of the user which launched the flow", + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "NOT_LAUNCHED", + "PROCESSING", + "COMPLETED", + "FAILED" + ] + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "A unique id for the step execution" + }, + "accountId": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "NOT_STARTED", + "PROCESSING", + "COMPLETED", + "FAILED" + ] + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "outputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "fee": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "startedAt": { + "type": "number", + "description": "The step execution start time in epoch format." + }, + "completedAt": { + "type": "number", + "description": "The step execution end time in epoch format." + }, + "isSignRequired": { + "type": "boolean", + "description": "Whether or not signing is required for executing the step." + } + }, + "required": [ + "id", + "accountId", + "status", + "inputAmount", + "isSignRequired" + ] + } + }, + "selectedConversionSlippage": { + "type": "object", + "description": "Indicates the selected slippage used during the flow since override logic may have taken place.", + "properties": { + "basisPoints": { + "type": "number" + }, + "reason": { + "type": "string", + "enum": [ + "DEFAULT", + "CONFIG", + "FLOW" + ] + } + }, + "required": [ + "basisPoints", + "reason" + ] + } + }, + "required": [ + "flowId", + "configId", + "steps", + "inputAmount", + "outputAmount", + "totalFee", + "initiatedAt", + "initiatedBy", + "state", + "selectedConversionSlippage" + ] + } + } + }, + "description": "Get specific cross-border settlement flow details.\n\nGets details for a specific cross-border settlement flow\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "post", + "path": "/payments/xb-settlements/flows/{flowId}/actions/execute", + "name": "payments_xb_settlements_flows_actions_execute_postByFlowid", + "parameters": [ + { + "type": "object", + "properties": { + "flowId": { + "type": "string", + "description": "The cross-border settlement flow ID." + }, + "body": { + "type": "object", + "properties": { + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "flowId": { + "type": "string", + "description": "The unique id for the cross-border flow." + }, + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "outputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "totalFee": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "initiatedAt": { + "type": "number", + "description": "The time the cross-border flow executed in epoch format." + }, + "initiatedBy": { + "description": "The id of the user which launched the flow", + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "NOT_LAUNCHED", + "PROCESSING", + "COMPLETED", + "FAILED" + ] + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "A unique id for the step execution" + }, + "accountId": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "NOT_STARTED", + "PROCESSING", + "COMPLETED", + "FAILED" + ] + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "outputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "fee": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "startedAt": { + "type": "number", + "description": "The step execution start time in epoch format." + }, + "completedAt": { + "type": "number", + "description": "The step execution end time in epoch format." + }, + "isSignRequired": { + "type": "boolean", + "description": "Whether or not signing is required for executing the step." + } + }, + "required": [ + "id", + "accountId", + "status", + "inputAmount", + "isSignRequired" + ] + } + }, + "selectedConversionSlippage": { + "type": "object", + "description": "Indicates the selected slippage used during the flow since override logic may have taken place.", + "properties": { + "basisPoints": { + "type": "number" + }, + "reason": { + "type": "string", + "enum": [ + "DEFAULT", + "CONFIG", + "FLOW" + ] + } + }, + "required": [ + "basisPoints", + "reason" + ] + } + }, + "required": [ + "flowId", + "configId", + "steps", + "inputAmount", + "outputAmount", + "totalFee", + "initiatedAt", + "initiatedBy", + "state", + "selectedConversionSlippage" + ] + }, + "description": "Execute cross-border settlement flow.\n\nSend a payment flow with 'flowId' for execution.\nIf a differet slippage configuraion is needed for this execution than configured in the flow configuration, the request body must define the desired slippage configuration for this execution.\n\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "post", + "path": "/payments/payout", + "name": "payments_payout_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "paymentAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "FIAT_ACCOUNT" + ] + } + }, + "required": [ + "id", + "type" + ] + }, + "instructionSet": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "payeeAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT" + ], + "description": "- VAULT_ACCOUNT \ta native Fireblocks vault account\n- EXCHANGE_ACCOUNT \ta third-party exchange account\n- INTERNAL_WALLET \ta whitelisted address marked as internal to the workspace/organization\n- EXTERNAL_WALLET\ta whitelisted address marked as external\n- NETWORK_CONNECTION\ta member of the Fireblocks network\n- FIAT_ACCOUNT\ta third-party account of a fiat bank (Signature, BCB, etc)\n" + } + }, + "required": [ + "id", + "type" + ] + }, + "amount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": { + "type": "string" + } + }, + "required": [ + "amount", + "assetId" + ] + } + }, + "required": [ + "amount", + "payeeAccount" + ] + } + } + }, + "required": [ + "paymentAccount", + "instructionSet" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "payoutId": { + "type": "string" + }, + "paymentAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "FIAT_ACCOUNT" + ] + } + } + }, + "createdAt": { + "type": "number" + }, + "state": { + "type": "string", + "enum": [ + "CREATED", + "FILE_FOUND", + "REQUESTED", + "TRANSLATED", + "PROCESSING", + "SUBMITTED", + "FINALIZED", + "INSUFFICIENT_BALANCE", + "FAILED" + ], + "description": "- CREATED - payout instruction set created with all its details\n- FILE_FOUND - new file found in the FTP\n- REQUESTED - payout requested with all its details\n- TRANSLATED - payout instruction account IDs identified and translated\n- PROCESSING - payout instruction set executed and is processing\n- SUBMITTED - transactions submitted for payout instructions\n- FINALIZED - payout finished processing, all transactions processed successfully\n- INSUFFICIENT_BALANCE - insufficient balance in the payment account (can be a temporary state)\n- FAILED - one or more of the payout instructions failed\n" + }, + "status": { + "type": "string", + "enum": [ + "REGISTERED", + "VERIFYING", + "IN_PROGRESS", + "DONE", + "INSUFFICIENT_BALANCE", + "FAILED" + ], + "description": "- REQUESTED\tpayout requested with all its details\n- VERIFIED\tpayout instruction set details were verified\n- PROCESSING\tpayout instruction set executed and is processing\n- FINALIZED\tpayout done (all payout instructions completed successfully)\n- INSUFFICIENT_BALANCE\tinsufficient balance in the payment account (can be a temporary state)\n- FAILED\tone or more of the payout instructions failed\n" + }, + "reasonOfFailure": { + "type": "string", + "description": "
    \n
  • INSUFFICIENT_BALANCE
  • \n
  • SOURCE_TRANSLATION
  • \n
  • SOURCE_NOT_UNIQUE
  • \n
  • SOURCE_NOT_FOUND
  • \n
  • SOURCE_TYPE_NOT_SUPPORTED
  • \n
  • EMPTY_SOURCE
  • \n
  • DESTINATION_TRANSLATION
  • \n
  • DESTINATION_NOT_UNIQUE
  • \n
  • DESTINATION_NOT_FOUND
  • \n
  • EMPTY_DESTINATION
  • \n
  • PARSING
  • \n
  • UNKNOWN
  • \n
  • FIREBLOCKS_CLIENT
  • \n
  • TRANSACTION_SUBMISSION
  • \n
\n" + }, + "initMethod": { + "type": "string", + "enum": [ + "FILE", + "API" + ] + }, + "instructionSet": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "payeeAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT" + ], + "description": "- VAULT_ACCOUNT \ta native Fireblocks vault account\n- EXCHANGE_ACCOUNT \ta third-party exchange account\n- INTERNAL_WALLET \ta whitelisted address marked as internal to the workspace/organization\n- EXTERNAL_WALLET\ta whitelisted address marked as external\n- NETWORK_CONNECTION\ta member of the Fireblocks network\n- FIAT_ACCOUNT\ta third-party account of a fiat bank (Signature, BCB, etc)\n" + } + } + }, + "amount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": { + "type": "string" + } + }, + "required": [ + "amount", + "assetId" + ] + }, + "state": { + "type": "string", + "enum": [ + "NOT_STARTED", + "TRANSACTION_SENT", + "COMPLETED", + "FAILED", + "TRANSLATION_ERROR", + "SKIPPED" + ], + "description": "- NOT_STARTED\t- waiting to start\n- TRANSACTION_SENT - an underlying transaction was sent\n- COMPLETED\t- completed successfully\n- FAILED - failed\n- TRANSLATION_ERROR -lookup of the destination failed (due to changes in the underlying whitelisted external wallet or similar)\n- SKIPPED- no transaction(s) created for this instruction\n" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "SUBMITTED", + "QUEUED", + "PENDING_AUTHORIZATION", + "PENDING_SIGNATURE", + "BROADCASTING", + "PENDING_3RD_PARTY_MANUAL_APPROVAL", + "PENDING_3RD_PARTY", + "PENDING", + "CONFIRMING", + "CONFIRMED", + "COMPLETED", + "PARTIALLY_COMPLETED", + "PENDING_AML_SCREENING", + "CANCELLING", + "CANCELLED", + "REJECTED", + "BLOCKED", + "FAILED", + "TIMEOUT" + ] + }, + "timestamp": { + "type": "number", + "format": "date-time" + }, + "instructionId": { + "type": "string" + } + }, + "required": [ + "id", + "state" + ] + } + } + }, + "required": [ + "amount", + "payeeAccount", + "state", + "transactions" + ] + } + }, + "reportUrl": { + "type": "string" + } + }, + "required": [ + "payoutId", + "createdAt", + "state", + "status", + "paymentAccount", + "instructionSet" + ] + }, + "description": "Create a payout instruction set.\n\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoints include APIs available only for customers with Payments Engine enabled on their accounts.
\n
These endpoints are currently in beta and might be subject to changes.
\n
If you want to learn more about Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or email CSM@fireblocks.com.
\n
Create a payout instruction set.
\nA payout instruction set is a set of instructions for distributing payments from a single payment account to a list of payee accounts.
\nThe instruction set defines:
\n
    \n
  • the payment account and its account type (vault, exchange, or fiat).
  • \n
  • the account type (vault account, exchange account, whitelisted address, network connection, fiat account, or merchant account), the amount, and the asset of payment for each payee account.
  • \n
\n" + }, + { + "method": "post", + "path": "/payments/payout/{payoutId}/actions/execute", + "name": "payments_payout_actions_execute_postByPayoutid", + "parameters": [ + { + "type": "object", + "properties": { + "payoutId": { + "type": "string", + "description": "the payout id received from the creation of the payout instruction set" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "payoutId": { + "type": "string" + } + }, + "required": [ + "payoutId" + ] + }, + "description": "Execute a payout instruction set.\n\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoints include APIs available only for customers with Payments Engine enabled on their accounts.
\n
These endpoints are currently in beta and might be subject to changes.
\n
If you want to learn more about Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or email CSM@fireblocks.com.
\n
Execute a payout instruction set.
\n
The instruction set will be verified and executed.
\nSource locking
\nIf you are executing a payout instruction set from a payment account with an already active payout the active payout will complete before the new payout instruction set can be executed.
\nYou cannot execute the same payout instruction set more than once.\n" + }, + { + "method": "get", + "path": "/payments/payout/{payoutId}", + "name": "payments_payout_getByPayoutid", + "parameters": [ + { + "type": "object", + "properties": { + "payoutId": { + "type": "string", + "description": "the payout id received from the creation of the payout instruction set" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "payoutId": { + "type": "string" + }, + "paymentAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "FIAT_ACCOUNT" + ] + } + } + }, + "createdAt": { + "type": "number" + }, + "state": { + "type": "string", + "enum": [ + "CREATED", + "FILE_FOUND", + "REQUESTED", + "TRANSLATED", + "PROCESSING", + "SUBMITTED", + "FINALIZED", + "INSUFFICIENT_BALANCE", + "FAILED" + ], + "description": "- CREATED - payout instruction set created with all its details\n- FILE_FOUND - new file found in the FTP\n- REQUESTED - payout requested with all its details\n- TRANSLATED - payout instruction account IDs identified and translated\n- PROCESSING - payout instruction set executed and is processing\n- SUBMITTED - transactions submitted for payout instructions\n- FINALIZED - payout finished processing, all transactions processed successfully\n- INSUFFICIENT_BALANCE - insufficient balance in the payment account (can be a temporary state)\n- FAILED - one or more of the payout instructions failed\n" + }, + "status": { + "type": "string", + "enum": [ + "REGISTERED", + "VERIFYING", + "IN_PROGRESS", + "DONE", + "INSUFFICIENT_BALANCE", + "FAILED" + ], + "description": "- REQUESTED\tpayout requested with all its details\n- VERIFIED\tpayout instruction set details were verified\n- PROCESSING\tpayout instruction set executed and is processing\n- FINALIZED\tpayout done (all payout instructions completed successfully)\n- INSUFFICIENT_BALANCE\tinsufficient balance in the payment account (can be a temporary state)\n- FAILED\tone or more of the payout instructions failed\n" + }, + "reasonOfFailure": { + "type": "string", + "description": "
    \n
  • INSUFFICIENT_BALANCE
  • \n
  • SOURCE_TRANSLATION
  • \n
  • SOURCE_NOT_UNIQUE
  • \n
  • SOURCE_NOT_FOUND
  • \n
  • SOURCE_TYPE_NOT_SUPPORTED
  • \n
  • EMPTY_SOURCE
  • \n
  • DESTINATION_TRANSLATION
  • \n
  • DESTINATION_NOT_UNIQUE
  • \n
  • DESTINATION_NOT_FOUND
  • \n
  • EMPTY_DESTINATION
  • \n
  • PARSING
  • \n
  • UNKNOWN
  • \n
  • FIREBLOCKS_CLIENT
  • \n
  • TRANSACTION_SUBMISSION
  • \n
\n" + }, + "initMethod": { + "type": "string", + "enum": [ + "FILE", + "API" + ] + }, + "instructionSet": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "payeeAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT" + ], + "description": "- VAULT_ACCOUNT \ta native Fireblocks vault account\n- EXCHANGE_ACCOUNT \ta third-party exchange account\n- INTERNAL_WALLET \ta whitelisted address marked as internal to the workspace/organization\n- EXTERNAL_WALLET\ta whitelisted address marked as external\n- NETWORK_CONNECTION\ta member of the Fireblocks network\n- FIAT_ACCOUNT\ta third-party account of a fiat bank (Signature, BCB, etc)\n" + } + } + }, + "amount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": { + "type": "string" + } + }, + "required": [ + "amount", + "assetId" + ] + }, + "state": { + "type": "string", + "enum": [ + "NOT_STARTED", + "TRANSACTION_SENT", + "COMPLETED", + "FAILED", + "TRANSLATION_ERROR", + "SKIPPED" + ], + "description": "- NOT_STARTED\t- waiting to start\n- TRANSACTION_SENT - an underlying transaction was sent\n- COMPLETED\t- completed successfully\n- FAILED - failed\n- TRANSLATION_ERROR -lookup of the destination failed (due to changes in the underlying whitelisted external wallet or similar)\n- SKIPPED- no transaction(s) created for this instruction\n" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "SUBMITTED", + "QUEUED", + "PENDING_AUTHORIZATION", + "PENDING_SIGNATURE", + "BROADCASTING", + "PENDING_3RD_PARTY_MANUAL_APPROVAL", + "PENDING_3RD_PARTY", + "PENDING", + "CONFIRMING", + "CONFIRMED", + "COMPLETED", + "PARTIALLY_COMPLETED", + "PENDING_AML_SCREENING", + "CANCELLING", + "CANCELLED", + "REJECTED", + "BLOCKED", + "FAILED", + "TIMEOUT" + ] + }, + "timestamp": { + "type": "number", + "format": "date-time" + }, + "instructionId": { + "type": "string" + } + }, + "required": [ + "id", + "state" + ] + } + } + }, + "required": [ + "amount", + "payeeAccount", + "state", + "transactions" + ] + } + }, + "reportUrl": { + "type": "string" + } + }, + "required": [ + "payoutId", + "createdAt", + "state", + "status", + "paymentAccount", + "instructionSet" + ] + }, + "description": "Get the status of a payout instruction set.\n\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoints include APIs available only for customers with Payments Engine enabled on their accounts.
\n
These endpoints are currently in beta and might be subject to changes.
\n
If you want to learn more about Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or email CSM@fireblocks.com.
\n" + }, + { + "method": "get", + "path": "/gas_station", + "name": "gas_station_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "properties": { + "balance": { + "type": "object" + }, + "configuration": { + "type": "object", + "properties": { + "gasThreshold": { + "type": "string" + }, + "gasCap": { + "type": "string" + }, + "maxGasPrice": { + "type": "string" + } + } + } + }, + "required": [ + "low", + "medium", + "high" + ] + }, + "description": "Get gas station settings.\n\nReturns gas station settings and ETH balance." + }, + { + "method": "get", + "path": "/gas_station/{assetId}", + "name": "gas_station_getByAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "balance": { + "type": "object" + }, + "configuration": { + "type": "object", + "properties": { + "gasThreshold": { + "type": "string" + }, + "gasCap": { + "type": "string" + }, + "maxGasPrice": { + "type": "string" + } + } + } + }, + "required": [ + "low", + "medium", + "high" + ] + }, + "description": "Get gas station settings by asset.\n\nReturns gas station settings and balances for a requested asset." + }, + { + "method": "put", + "path": "/gas_station/configuration", + "name": "gas_station_configuration_put", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "gasThreshold": { + "type": "string" + }, + "gasCap": { + "type": "string" + }, + "maxGasPrice": { + "type": "string" + } + } + } + } + } + ], + "description": "Edit gas station settings.\n\nConfigures gas station settings for ETH." + }, + { + "method": "put", + "path": "/gas_station/configuration/{assetId}", + "name": "gas_station_configuration_putByAssetid", + "parameters": [ + { + "type": "object", + "properties": { + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + "body": { + "type": "object", + "properties": { + "gasThreshold": { + "type": "string" + }, + "gasCap": { + "type": "string" + }, + "maxGasPrice": { + "type": "string" + } + } + } + } + } + ], + "description": "Edit gas station settings for an asset.\n\nConfigures gas station settings for a requested asset." + }, + { + "method": "get", + "path": "/users", + "name": "users_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "role": { + "type": "string" + }, + "email": { + "type": "string" + }, + "enabled": { + "type": "boolean" + } + } + } + } + } + }, + "description": "List users.\n\nList all users for the workspace.\n\nPlease note that this endpoint is available only for API keys with Admin permissions.\n" + }, + { + "method": "get", + "path": "/audits", + "name": "audits_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": {}, + "required": [] + } + } + } + ], + "description": "Get audit logs" + }, + { + "method": "post", + "path": "/off_exchange/add", + "name": "off_exchange_add_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "transactionRequest": { + "type": "object", + "properties": { + "operation": { + "type": "string", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE" + ], + "description": "* `TRANSFER` - The default value for an operation. Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, to describe the transaction at your Fireblocks workspace.", + "example": "Ticket 123" + }, + "externalTxId": { + "type": "string", + "description": "An optional but highly recommended parameter. Fireblocks will reject future transactions with same ID. \n \nYou should set this to a unique ID representing the transaction, to avoid submitting the same transaction twice. This helps with cases where submitting the transaction responds with an error code due to Internet interruptions, but the transaction was actually sent and processed. To validate whether a transaction has been processed, [Find a specific transaction by external transaction ID](https://developers.fireblocks.com/reference/get_transactions-external-tx-id-externaltxid).\n \nThere is no specific format required for this parameter.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT` or `BURN` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset", + "example": "ETH" + }, + "source": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT", + "COMPOUND", + "GAS_STATION", + "ONE_TIME_ADDRESS", + "UNKNOWN", + "END_USER_WALLET" + ] + }, + "subType": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "BLINC", + "BYBIT", + "CIRCLE", + "COINBASEEXCHANGE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "GEMINI", + "HITBTC", + "HUOBI", + "INDEPENDENTRESERVE", + "KORBIT", + "KRAKEN", + "KRAKENINTL", + "KUCOIN", + "LIQUID", + "OKCOIN", + "OKEX", + "PAXOS", + "POLONIEX", + "External", + "Internal" + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "walletId": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "type" + ] + }, + "destination": {}, + "destinations": { + "type": "array", + "description": "For UTXO based blockchains, you can send a single transaction to multiple destinations.", + "items": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "destination": {} + } + } + }, + "amount": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "0.02" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 0.02 + } + ], + "description": "For `TRANSFER` operations, the requested amount to transfer, in the asset’s unit. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "\"When set to `true`, the fee will be deducted from the requested amount.\"\n\n**Note**: This parameter can only be considered if a transaction’s asset is a base asset, such as ETH or MATIC. If the asset can’t be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account." + }, + "forceSweep": { + "type": "boolean", + "description": "For Polkadot, Kusama and Westend transactions only. When set to true, Fireblocks will empty the asset wallet.\n\n **Note:** If set to true when the source account is exactly 1 DOT, the transaction will fail. Any amount more or less than 1 DOT succeeds. This is a Polkadot blockchain limitation." + }, + "feeLevel": { + "type": "string", + "enum": [ + "LOW", + "MEDIUM", + "HIGH" + ], + "description": "For UTXO or EVM-based blockchains only. Defines the blockchain fee level which will be payed for the transaction. Alternatively, specific fee estimation parameters exist below." + }, + "fee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For UTXO-based blockchains, the fee per bytes in the asset’s smallest unit (Satoshi, Latoshi, etc.). For Ripple, the fee for the transaction. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "priorityFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "2" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 2 + } + ], + "description": "For Ethereum-based blockchains only, the fee for EIP-1559 transaction pricing mechanism. Value is in Gwei. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "failOnLowFee": { + "type": "boolean", + "description": "When set to `true`, in case the current `MEDIUM` fee level is higher than the one specified in the transaction, the transaction will fail to avoid getting stuck with no confirmations." + }, + "maxFee": { + "description": "The maximum fee (gas price or fee per byte) that should be payed for the transaction. In case the current value of the requested `feeLevel` is higher than this requested maximum fee. Represented by a numeric string for accurate precision.", + "type": "string", + "example": "120" + }, + "gasLimit": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "21000" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 21000 + } + ], + "description": "For EVM-based blockchains only. Units of gas required to process the transaction. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "gasPrice": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For non-EIP-1559, EVM-based transactions. Price per gas unit (in Ethereum this is specified in Gwei). Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "networkFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For EVM-based blockchains only. The total transaction fee in the blockchain’s largest unit. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated. - The transaction blockchain fee.\n- For Ethereum, you can't pass gasPrice, gasLimit and networkFee all together.\n- A numeric value representation is required." + }, + "replaceTxByHash": { + "type": "string", + "description": "For EVM-based blockchains only. In case a transaction is stuck, specify the hash of the stuck transaction to replace it by this transaction with a higher fee, or to replace it with this transaction with a zero fee and drop it from the blockchain.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "extraParameters": { + "type": "object", + "properties": {}, + "description": "Additional protocol / operation specific key-value parameters:\n\nFor UTXO-based blockchain input selection, add the key `inputsSelection` with the value set the [input selection structure.](https://developers.fireblocks.com/reference/transaction-objects#inputsselection) The inputs can be retrieved from the [Retrieve Unspent Inputs endpoint.](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid-assetid-unspent-inputs)\n\nFor `RAW` operations, add the key `rawMessageData` with the value set to the [raw message data structure.](https://developers.fireblocks.com/reference/raw-signing-objects#rawmessagedata)\n\nFor `CONTRACT_CALL` operations, add the key `contractCallData` with the value set to the Ethereum smart contract Application Binary Interface (ABI) payload. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n" + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions.", + "example": "abcdef" + }, + "autoStaking": { + "type": "boolean", + "description": "This feature is no longer supported." + }, + "networkStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + }, + "cpuStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + } + } + }, + "isSrcCollateral": { + "type": "boolean", + "description": "optional" + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the transaction." + }, + "status": { + "type": "string", + "description": "The primary status of the transaction. For details, see [Primary transaction statuses.] (https://developers.fireblocks.com/reference/primary-transaction-statuses)" + }, + "systemMessages": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "WARN", + "BLOCK" + ] + }, + "message": { + "type": "string", + "description": "A response from Fireblocks that communicates a message about the health of the process being performed. If this object is returned with data, you should expect potential delays or incomplete transaction statuses.", + "example": "Slow transaction processing. Outgoing transactions might be stuck." + } + } + } + } + }, + "description": "add collateral, create deposit request" + }, + { + "method": "post", + "path": "/off_exchange/remove", + "name": "off_exchange_remove_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "transactionRequest": { + "type": "object", + "properties": { + "operation": { + "type": "string", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE" + ], + "description": "* `TRANSFER` - The default value for an operation. Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, to describe the transaction at your Fireblocks workspace.", + "example": "Ticket 123" + }, + "externalTxId": { + "type": "string", + "description": "An optional but highly recommended parameter. Fireblocks will reject future transactions with same ID. \n \nYou should set this to a unique ID representing the transaction, to avoid submitting the same transaction twice. This helps with cases where submitting the transaction responds with an error code due to Internet interruptions, but the transaction was actually sent and processed. To validate whether a transaction has been processed, [Find a specific transaction by external transaction ID](https://developers.fireblocks.com/reference/get_transactions-external-tx-id-externaltxid).\n \nThere is no specific format required for this parameter.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT` or `BURN` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset", + "example": "ETH" + }, + "source": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT", + "COMPOUND", + "GAS_STATION", + "ONE_TIME_ADDRESS", + "UNKNOWN", + "END_USER_WALLET" + ] + }, + "subType": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "BLINC", + "BYBIT", + "CIRCLE", + "COINBASEEXCHANGE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "GEMINI", + "HITBTC", + "HUOBI", + "INDEPENDENTRESERVE", + "KORBIT", + "KRAKEN", + "KRAKENINTL", + "KUCOIN", + "LIQUID", + "OKCOIN", + "OKEX", + "PAXOS", + "POLONIEX", + "External", + "Internal" + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "walletId": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "type" + ] + }, + "destination": {}, + "destinations": { + "type": "array", + "description": "For UTXO based blockchains, you can send a single transaction to multiple destinations.", + "items": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "destination": {} + } + } + }, + "amount": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "0.02" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 0.02 + } + ], + "description": "For `TRANSFER` operations, the requested amount to transfer, in the asset’s unit. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "\"When set to `true`, the fee will be deducted from the requested amount.\"\n\n**Note**: This parameter can only be considered if a transaction’s asset is a base asset, such as ETH or MATIC. If the asset can’t be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account." + }, + "forceSweep": { + "type": "boolean", + "description": "For Polkadot, Kusama and Westend transactions only. When set to true, Fireblocks will empty the asset wallet.\n\n **Note:** If set to true when the source account is exactly 1 DOT, the transaction will fail. Any amount more or less than 1 DOT succeeds. This is a Polkadot blockchain limitation." + }, + "feeLevel": { + "type": "string", + "enum": [ + "LOW", + "MEDIUM", + "HIGH" + ], + "description": "For UTXO or EVM-based blockchains only. Defines the blockchain fee level which will be payed for the transaction. Alternatively, specific fee estimation parameters exist below." + }, + "fee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For UTXO-based blockchains, the fee per bytes in the asset’s smallest unit (Satoshi, Latoshi, etc.). For Ripple, the fee for the transaction. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "priorityFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "2" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 2 + } + ], + "description": "For Ethereum-based blockchains only, the fee for EIP-1559 transaction pricing mechanism. Value is in Gwei. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "failOnLowFee": { + "type": "boolean", + "description": "When set to `true`, in case the current `MEDIUM` fee level is higher than the one specified in the transaction, the transaction will fail to avoid getting stuck with no confirmations." + }, + "maxFee": { + "description": "The maximum fee (gas price or fee per byte) that should be payed for the transaction. In case the current value of the requested `feeLevel` is higher than this requested maximum fee. Represented by a numeric string for accurate precision.", + "type": "string", + "example": "120" + }, + "gasLimit": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "21000" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 21000 + } + ], + "description": "For EVM-based blockchains only. Units of gas required to process the transaction. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "gasPrice": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For non-EIP-1559, EVM-based transactions. Price per gas unit (in Ethereum this is specified in Gwei). Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "networkFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For EVM-based blockchains only. The total transaction fee in the blockchain’s largest unit. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated. - The transaction blockchain fee.\n- For Ethereum, you can't pass gasPrice, gasLimit and networkFee all together.\n- A numeric value representation is required." + }, + "replaceTxByHash": { + "type": "string", + "description": "For EVM-based blockchains only. In case a transaction is stuck, specify the hash of the stuck transaction to replace it by this transaction with a higher fee, or to replace it with this transaction with a zero fee and drop it from the blockchain.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "extraParameters": { + "type": "object", + "properties": {}, + "description": "Additional protocol / operation specific key-value parameters:\n\nFor UTXO-based blockchain input selection, add the key `inputsSelection` with the value set the [input selection structure.](https://developers.fireblocks.com/reference/transaction-objects#inputsselection) The inputs can be retrieved from the [Retrieve Unspent Inputs endpoint.](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid-assetid-unspent-inputs)\n\nFor `RAW` operations, add the key `rawMessageData` with the value set to the [raw message data structure.](https://developers.fireblocks.com/reference/raw-signing-objects#rawmessagedata)\n\nFor `CONTRACT_CALL` operations, add the key `contractCallData` with the value set to the Ethereum smart contract Application Binary Interface (ABI) payload. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n" + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions.", + "example": "abcdef" + }, + "autoStaking": { + "type": "boolean", + "description": "This feature is no longer supported." + }, + "networkStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + }, + "cpuStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + } + } + }, + "isDstCollateral": { + "type": "boolean", + "description": "optional" + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the transaction." + }, + "status": { + "type": "string", + "description": "The primary status of the transaction. For details, see [Primary transaction statuses.] (https://developers.fireblocks.com/reference/primary-transaction-statuses)" + }, + "systemMessages": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "WARN", + "BLOCK" + ] + }, + "message": { + "type": "string", + "description": "A response from Fireblocks that communicates a message about the health of the process being performed. If this object is returned with data, you should expect potential delays or incomplete transaction statuses.", + "example": "Slow transaction processing. Outgoing transactions might be stuck." + } + } + } + } + }, + "description": "remove collateral, create withdraw request" + }, + { + "method": "get", + "path": "/off_exchange/collateral_accounts/{mainExchangeAccountId}", + "name": "off_exchange_collateral_accounts_getByMainexchangeaccountid", + "parameters": [ + { + "type": "object", + "properties": { + "mainExchangeAccountId": { + "type": "string", + "minimum": 1, + "description": "The id of the main exchange account for which the requested collateral account is associated with" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "CIRCLE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "FTX", + "FIXUS", + "GEMINI", + "HITBTC", + "HUOBI", + "KORBIT", + "KRAKEN", + "LIQUID", + "POLONIEX", + "OKCOIN", + "OKEX", + "SEEDCX" + ] + }, + "name": { + "type": "string", + "description": "Display name of the exchange account" + }, + "status": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "total": { + "type": "string" + }, + "available": { + "type": "string" + } + } + } + }, + "tradingAccounts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "total": { + "type": "string" + }, + "available": { + "type": "string" + } + } + } + } + } + } + }, + "isSubaccount": { + "type": "boolean", + "description": "True if the account is a subaccount in an exchange" + }, + "mainAccountId": { + "description": "if the account is a sub-account, the ID of the main account", + "type": "string" + } + } + }, + "description": "Find a specific collateral exchange account.\n\nReturns a collateral account by mainExchangeAccountId." + }, + { + "method": "post", + "path": "/webhooks/resend", + "name": "webhooks_resend_post", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "properties": { + "messagesCount": { + "type": "number" + } + } + }, + "description": "Resend failed webhooks.\n\nResends all failed webhook notifications." + }, + { + "method": "post", + "path": "/webhooks/resend/{txId}", + "name": "webhooks_resend_postByTxid", + "parameters": [ + { + "type": "object", + "properties": { + "txId": { + "type": "string", + "minimum": 1, + "description": "The ID of the transaction for webhooks" + }, + "body": {} + } + } + ], + "description": "Resend failed webhooks for a transaction by ID.\n\nResends failed webhook notifications for a transaction by ID." + }, + { + "method": "get", + "path": "/nfts/ownership/tokens", + "name": "nfts_ownership_tokens_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "vaultAccountIds": { + "type": "string", + "description": "A comma separated list of Vault Account IDs. Up to 100 are allowed in a single request" + }, + "ids": { + "type": "string", + "description": "A comma separated list of NFT IDs. Up to 100 are allowed in a single request." + }, + "collectionIds": { + "type": "string", + "description": "A comma separated list of collection IDs. Up to 100 are allowed in a single request." + }, + "pageCursor": { + "type": "string", + "description": "Page cursor to fetch" + }, + "pageSize": { + "minimum": 1, + "maximum": 100, + "type": "number", + "description": "Items per page (max 100)" + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "ownershipLastUpdateTime", + "name", + "collection.name", + "blockchainDescriptor" + ] + }, + "description": "Sort by param, it can be one param or a list of params separated by comma" + }, + "search": { + "maximum": 100, + "type": "string", + "description": "Search owned tokens and their collections. Possible criteria for search: token name and id within the contract/collection, collection name, blockchain descriptor and name." + } + }, + "required": [] + } + } + } + ], + "output": {}, + "description": "List all owned tokens (paginated).\n\nReturns all tokens and their data in your workspace.\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n" + }, + { + "method": "put", + "path": "/nfts/ownership/tokens", + "name": "nfts_ownership_tokens_put", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "description": "Vault account filter" + } + }, + "required": [ + "vaultAccountId" + ] + } + } + } + ], + "description": "Refresh vault account tokens.\n\nUpdates all tokens and balances per blockchain and vault account.\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n" + }, + { + "method": "get", + "path": "/nfts/ownership/collections", + "name": "nfts_ownership_collections_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "search": { + "maximum": 100, + "type": "string", + "description": "Search owned collections. Possible criteria for search: collection name, collection contract address." + }, + "pageCursor": { + "type": "string", + "description": "Page cursor to fetch" + }, + "pageSize": { + "minimum": 1, + "maximum": 100, + "type": "number", + "description": "Items per page (max 100)" + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "name" + ] + }, + "description": "Sort by param, it can be one param or a list of params separated by comma" + } + }, + "required": [] + } + } + } + ], + "output": {}, + "description": "List owned collections (paginated).\n\nReturns all collections in your workspace\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n" + }, + { + "method": "get", + "path": "/nfts/tokens/{id}", + "name": "nfts_tokens_getById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "NFT ID" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The Fireblocks NFT asset id" + }, + "tokenId": { + "type": "string", + "description": "Token id within the contract/collection" + }, + "standard": { + "type": "string", + "description": "ERC721 / ERC1155" + }, + "metadataURI": { + "type": "string", + "description": "URL of the original token JSON metadata" + }, + "cachedMetadataURI": { + "type": "string", + "description": "URL of the cached token JSON metadata" + }, + "media": { + "description": "Media items extracted from metadata JSON", + "type": "array", + "items": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "Cached accessible URL" + }, + "contentType": { + "type": "string", + "enum": [ + "IMAGE", + "VIDEO", + "ANIMATION", + "THREE_D", + "TEXT", + "GIF", + "UNKNOWN_TYPE", + "SVG", + "AUDIO" + ], + "description": "Media type" + } + }, + "required": [ + "url", + "contentType" + ] + } + }, + "collection": { + "description": "Parent collection information", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "symbol": { + "type": "string" + } + } + }, + "blockchainDescriptor": { + "type": "string", + "enum": [ + "ETH", + "ETH_TEST3", + "POLYGON", + "POLYGON_TEST_MUMBAI" + ] + }, + "description": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "tokenId", + "standard", + "media", + "blockchainDescriptor", + "description", + "name" + ] + }, + "description": "List token data by ID.\n\nReturns the requested token data.\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n" + }, + { + "method": "put", + "path": "/nfts/tokens/{id}", + "name": "nfts_tokens_putById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "NFT ID" + } + } + } + ], + "description": "Refresh token metadata.\n\nUpdates the latest token metadata.\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n" + }, + { + "method": "get", + "path": "/nfts/tokens", + "name": "nfts_tokens_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "ids": { + "type": "string", + "description": "A comma separated list of NFT IDs. Up to 100 are allowed in a single request." + }, + "pageCursor": { + "type": "string", + "description": "Page cursor to fetch" + }, + "pageSize": { + "minimum": 1, + "maximum": 100, + "type": "number", + "description": "Items per page (max 100)" + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "collection.name", + "name", + "blockchainDescriptor" + ] + }, + "description": "Sort by param, it can be one param or a list of params separated by comma" + } + }, + "required": [ + "ids" + ] + } + } + } + ], + "output": {}, + "description": "List tokens by IDs.\n\nReturns the requested tokens data\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n" + }, + { + "method": "put", + "path": "/nfts/ownership/tokens/{id}/status", + "name": "nfts_ownership_tokens_status_putById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "NFT ID" + }, + "body": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "LISTED", + "ARCHIVED" + ] + } + }, + "required": [ + "status" + ] + } + } + } + ], + "description": "Update token ownership status.\n\nUpdates token ownership status for a tenant, in all tenant vaults.\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n" + }, + { + "method": "get", + "path": "/connections", + "name": "connections_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "userId": { + "type": "string" + }, + "vaultAccountId": { + "type": "number" + }, + "connectionMethod": { + "type": "string" + }, + "feeLevel": { + "type": "string" + }, + "appUrl": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "pageSize": { + "type": "number", + "default": 10, + "maximum": 50, + "description": "Amount of results to return in the next page." + }, + "next": { + "type": "string", + "description": "Cursor to the next page" + } + }, + "required": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "data": { + "description": "Array with the requested Web3 connection's data", + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Id of the connection", + "example": "4e9e7051-f3b2-48e9-8ee6-b12492552657" + }, + "userId": { + "type": "string", + "description": "Id of the user that created the connection" + }, + "sessionMetadata": { + "description": "Metadata of the connection (provided by the dapp)", + "type": "object", + "properties": { + "appUrl": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "appDescription": { + "type": "string" + }, + "appIcon": { + "type": "string" + } + } + }, + "vaultAccountId": { + "type": "number", + "description": "The vault to connect", + "example": 1 + }, + "feeLevel": { + "type": "string", + "enum": [ + "MEDIUM", + "HIGH" + ], + "description": "The default fee level" + }, + "chainIds": { + "description": "The chains approved for the connection", + "example": [ + "ETH", + "ETH_TEST", + "SOL" + ], + "type": "array", + "items": { + "type": "string" + } + }, + "connectionType": { + "type": "string", + "enum": [ + "WalletConnect" + ], + "description": "The connection's type" + }, + "connectionMethod": { + "type": "string", + "enum": [ + "DESKTOP", + "MOBILE", + "API" + ], + "description": "The method through which the connection was established" + }, + "creationDate": { + "format": "date-time", + "type": "string", + "description": "Timestamp of the session's creation" + } + }, + "required": [ + "id", + "userId", + "sessionMetadata", + "vaultAccountId", + "feeLevel", + "chainIds", + "connectionType", + "connectionMethod", + "creationDate" + ] + } + }, + "paging": { + "type": "object", + "properties": { + "next": { + "type": "string", + "description": "Cursor to the next page" + } + }, + "required": [ + "next" + ] + } + }, + "required": [ + "data" + ] + }, + "description": "List all open Web3 connections.\n\nGet open Web3 connections." + }, + { + "method": "post", + "path": "/connections/wc", + "name": "connections_wc_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "number", + "description": "The ID of the vault to connect to the Web3 connection.", + "example": 1 + }, + "feeLevel": { + "type": "string", + "enum": [ + "MEDIUM", + "HIGH" + ], + "description": "The default fee level. Valid values are `MEDIUM` and `HIGH`." + }, + "uri": { + "type": "string", + "description": "The WalletConnect uri provided by the dapp.", + "example": "wc:77752975-906f-48f5-b59f-047826ee947e@1?bridge=https%3A%2F%2F0.bridge.walletconnect.org&key=64be99adc6086b7a729b0ec8c7e1f174927ab92e84f5c6f9527050225344a637" + }, + "chainIds": { + "description": "The ID of the blockchain network used in the Web3 connection.", + "example": [ + "ETH", + "ETH_TEST" + ], + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "vaultAccountId", + "feeLevel", + "uri", + "chainIds" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the Web3 connection initiated.", + "example": "4e9e7051-f3b2-48e9-8ee6-b12492552657" + }, + "sessionMetadata": { + "description": "Metadata of the Web3 connection (provided by the DApp).", + "type": "object", + "properties": { + "appUrl": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "appDescription": { + "type": "string" + }, + "appIcon": { + "type": "string" + } + } + } + }, + "required": [ + "id", + "sessionMetadata" + ] + }, + "description": "Create a new Web3 connection.\n\nInitiate a new Web3 connection.\n\n* Note: After this succeeds, make a request to `PUT /v1/connections/wc/{id}` (below) to approve or reject the new Web3 connection." + }, + { + "method": "put", + "path": "/connections/wc/{id}", + "name": "connections_wc_putById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the initiated Web3 connection to approve." + }, + "body": { + "type": "object", + "properties": { + "approve": { + "type": "boolean", + "description": "Approval of the initiated Web3 connection." + } + }, + "required": [ + "approve" + ] + } + } + } + ], + "description": "Respond to a pending Web3 connection request.\n\nSubmit a response to *approve* or *reject* an initiated Web3 connection.\n* Note: This call is used to complete your `POST /v1/connections/wc/` request.\n\nAfter this succeeds, your new Web3 connection is created and functioning." + }, + { + "method": "delete", + "path": "/connections/wc/{id}", + "name": "connections_wc_eraseById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the existing Web3 connection to remove." + } + } + } + ], + "description": "Remove an existing Web3 connection.\n\nRemove a Web3 connection" + }, + { + "method": "post", + "path": "/screening/travel_rule/transaction/validate", + "name": "screening_travel_rule_transaction_validate_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "transactionAsset": { + "type": "string", + "example": "BTC", + "description": "Transaction asset symbol BTC,ETH)" + }, + "destination": { + "type": "string", + "example": "bc1qxy2kgdygjrsqtzq2n0yrf1234p83kkfjhx0wlh", + "description": "Transaction destination address" + }, + "transactionAmount": { + "type": "string", + "example": "10", + "description": "Transaction amount in the transaction asset" + }, + "originatorVASPdid": { + "type": "string", + "example": "did:ethr:0x44957e75d6ce4a5bf37aae117da86422c848f7c2", + "description": "This is the identifier assigned to your VASP" + }, + "originatorEqualsBeneficiary": { + "type": "boolean", + "description": "\"True\" if the originator and beneficiary is the same person and you therefore do not need to collect any information. \"False\" if it is a third-party transfer." + }, + "travelRuleBehavior": { + "type": "boolean", + "description": "This will also check if the transaction is a TRAVEL_RULE in the beneficiary VASP's jurisdiction" + }, + "beneficiaryVASPdid": { + "type": "string", + "example": "did:ethr:0x46a7ed5813ce735387df2bfb245bd7722e0de992", + "description": "This is the identifier assigned to the VASP the funds are being sent to" + }, + "beneficiaryVASPname": { + "type": "string", + "example": "HelloCrypto", + "description": "Beneficiary VASP name" + }, + "beneficiaryName": { + "type": "string", + "example": "John Doe", + "description": "Beneficiary name" + }, + "beneficiaryAccountNumber": { + "type": "string", + "example": "1234-1234-1234-12234", + "description": "Beneficiary name" + }, + "beneficiaryAddress": { + "example": "{\"addressLine: [Wayne Manor, Gotham City, New York, USA]\"}", + "description": "Beneficiary name", + "type": "object", + "properties": { + "street": { + "type": "string", + "example": "1234 Example St", + "description": "Street address" + }, + "city": { + "type": "string", + "example": "New York", + "description": "City" + }, + "state": { + "type": "string", + "example": "NY", + "description": "State or province" + }, + "postalCode": { + "type": "string", + "example": "10001", + "description": "Postal or ZIP code" + } + } + } + }, + "required": [ + "transactionAsset", + "destination", + "transactionAmount", + "originatorVASPdid", + "originatorEqualsBeneficiary", + "travelRuleBehavior", + "beneficiaryVASPdid", + "beneficiaryVASPname", + "beneficiaryName", + "beneficiaryAccountNumber", + "beneficiaryAddress" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "isValid": { + "type": "boolean", + "description": "\"isValid\" will tell you if you have collected all the information needed for the travel rule data transfer. Once this field = \"true\", you can move on to the next step which is to transfer the front-end information to your back-end and perform Travel Rule Transaction create" + }, + "type": { + "type": "string", + "description": "\"type\" will tell you if the virtual asset value converted to FIAT value of the withdrawal request is above (=TRAVELRULE) or below (=BELOW_THRESHOLD) the threshold in your jurisdiction. If it is to an unhosted wallet which does not require travel rule information to be sent and only collected, it will say NON_CUSTODIAL.", + "example": "TRAVELRULE" + }, + "beneficiaryAddressType": { + "type": "string", + "description": "\"beneficiaryAddressType\" will tell you if your blockchain analytics provider or internal address book has been able to identify the wallet address.", + "example": "UNKNOWN" + }, + "addressSource": { + "type": "string", + "description": "\"addressSource\" will tell you if the address was found in your internal address book or identified by the blockchain analytics provider.", + "example": "UNKNOWN" + }, + "beneficiaryVASPdid": { + "type": "string", + "description": "The VASP DID of the beneficiary VASP", + "example": "did:ethr:0x46a7ed5813ce735387df2bfb245bd7722e0de992" + }, + "beneficiaryVASPname": { + "type": "string", + "description": "\"beneficiaryVASPname\" will tell you the name of the VASP that has been identified as the owner of the wallet address. This name is used in a subsequent call to get its DID.", + "example": "Fireblocks" + }, + "warnings": { + "description": "\"errors/warnings\" will tell you what information about the beneficiary you need to collect from the sender.", + "example": [ + "optional-beneficiaryAccountNumber" + ], + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "isValid", + "type", + "beneficiaryAddressType", + "addressSource", + "beneficiaryVASPdid", + "beneficiaryVASPname", + "warnings" + ] + }, + "description": "Validate Travel Rule Transaction.\n\nValidate Travel Rule transactions.\n\nChecks what beneficiary VASP details are required by your jurisdiction and the beneficiary's jurisdiction.\n\n**Note:** The reference content in this section documents the Travel Rule beta endpoint. The beta endpoint includes APIs that are currently in preview and aren't yet generally available.\n\nTo enroll in the beta and enable this endpoint, contact your Fireblocks Customer Success Manager or send an email to [CSM@fireblocks.com](mailto:CSM@fireblocks.com)." + }, + { + "method": "post", + "path": "/screening/travel_rule/transaction/validate/full", + "name": "screening_travel_rule_transaction_validate_full_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "transactionAsset": { + "type": "string", + "description": "The asset involved in the transaction" + }, + "transactionAmount": { + "type": "string", + "description": "The amount of the transaction" + }, + "originatorDid": { + "type": "string", + "description": "The DID of the transaction originator" + }, + "beneficiaryDid": { + "type": "string", + "description": "The DID of the transaction beneficiary" + }, + "originatorVASPdid": { + "type": "string", + "description": "The VASP ID of the transaction originator" + }, + "beneficiaryVASPdid": { + "type": "string", + "description": "The VASP ID of the transaction beneficiary" + }, + "beneficiaryVASPname": { + "type": "string", + "description": "The name of the VASP acting as the beneficiary" + }, + "transactionBlockchainInfo": { + "description": "Information about the blockchain transaction", + "type": "object", + "properties": { + "txHash": { + "type": "string" + }, + "origin": { + "type": "string" + }, + "destination": { + "type": "string" + } + } + }, + "originator": { + "description": "Information about the originator of the transaction", + "type": "object", + "properties": { + "fullName": { + "type": "string" + }, + "dateOfBirth": { + "type": "string" + }, + "placeOfBirth": { + "type": "string" + }, + "address": { + "type": "string" + }, + "identificationNumber": { + "type": "string" + }, + "nationality": { + "type": "string" + }, + "countryOfResidence": { + "type": "string" + }, + "taxIdentificationNumber": { + "type": "string" + }, + "customerNumber": { + "type": "string" + } + } + }, + "beneficiary": { + "description": "Information about the beneficiary of the transaction", + "type": "object", + "properties": { + "fullName": { + "type": "string" + }, + "dateOfBirth": { + "type": "string" + }, + "placeOfBirth": { + "type": "string" + }, + "address": { + "type": "string" + }, + "identificationNumber": { + "type": "string" + }, + "nationality": { + "type": "string" + }, + "countryOfResidence": { + "type": "string" + }, + "taxIdentificationNumber": { + "type": "string" + }, + "customerNumber": { + "type": "string" + } + } + }, + "encrypted": { + "type": "string", + "description": "Encrypted data related to the transaction" + }, + "protocol": { + "type": "string", + "description": "The protocol used to perform the travel rule" + }, + "notificationEmail": { + "type": "string", + "description": "The email address where a notification should be sent upon completion of the travel rule" + }, + "skipBeneficiaryDataValidation": { + "type": "boolean", + "description": "Whether to skip validation of beneficiary data" + }, + "travelRuleBehavior": { + "type": "boolean", + "description": "Whether to check if the transaction is a TRAVEL_RULE in the beneficiary VASP's jurisdiction" + }, + "originatorProof": { + "description": "Ownership proof related to the originator of the transaction", + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "passport", + "description": "Type of ownership proof" + }, + "id": { + "type": "string", + "example": "123456789", + "description": "Identification number" + }, + "name": { + "type": "string", + "example": "Alice", + "description": "Name of owner" + }, + "country": { + "type": "string", + "example": "US", + "description": "Country of issuance" + }, + "issueDate": { + "type": "string", + "example": "2022-01-01", + "description": "Date of issuance" + }, + "issuer": { + "type": "string", + "example": "US Government", + "description": "Name of issuing entity" + } + } + }, + "beneficiaryProof": { + "description": "Ownership proof related to the beneficiary of the transaction", + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "passport", + "description": "Type of ownership proof" + }, + "id": { + "type": "string", + "example": "123456789", + "description": "Identification number" + }, + "name": { + "type": "string", + "example": "Alice", + "description": "Name of owner" + }, + "country": { + "type": "string", + "example": "US", + "description": "Country of issuance" + }, + "issueDate": { + "type": "string", + "example": "2022-01-01", + "description": "Date of issuance" + }, + "issuer": { + "type": "string", + "example": "US Government", + "description": "Name of issuing entity" + } + } + }, + "pii": { + "description": "Personal identifiable information related to the transaction", + "type": "object", + "properties": { + "fullName": { + "type": "string" + }, + "dateOfBirth": { + "type": "string" + }, + "placeOfBirth": { + "type": "string" + }, + "address": { + "type": "string" + }, + "identificationNumber": { + "type": "string" + }, + "nationality": { + "type": "string" + }, + "countryOfResidence": { + "type": "string" + }, + "taxIdentificationNumber": { + "type": "string" + }, + "customerNumber": { + "type": "string" + } + } + } + }, + "required": [ + "transactionAsset", + "transactionAmount", + "originatorDid", + "beneficiaryDid", + "originatorVASPdid", + "beneficiaryVASPdid", + "beneficiaryVASPname", + "transactionBlockchainInfo", + "originator", + "beneficiary", + "encrypted", + "protocol", + "notificationEmail", + "skipBeneficiaryDataValidation", + "travelRuleBehavior", + "originatorProof", + "beneficiaryProof", + "pii" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "isValid": { + "type": "boolean", + "description": "\"isValid\" will tell you if you have collected all the information needed for the travel rule data transfer. Once this field = \"true\", you can move on to the next step which is to transfer the front-end information to your back-end and perform Travel Rule Transaction create" + }, + "type": { + "type": "string", + "description": "\"type\" will tell you if the virtual asset value converted to FIAT value of the withdrawal request is above (=TRAVELRULE) or below (=BELOW_THRESHOLD) the threshold in your jurisdiction. If it is to an unhosted wallet which does not require travel rule information to be sent and only collected, it will say NON_CUSTODIAL.", + "example": "TRAVELRULE" + }, + "beneficiaryAddressType": { + "type": "string", + "description": "\"beneficiaryAddressType\" will tell you if your blockchain analytics provider or internal address book has been able to identify the wallet address.", + "example": "UNKNOWN" + }, + "addressSource": { + "type": "string", + "description": "\"addressSource\" will tell you if the address was found in your internal address book or identified by the blockchain analytics provider.", + "example": "UNKNOWN" + }, + "beneficiaryVASPdid": { + "type": "string", + "description": "The VASP DID of the beneficiary VASP", + "example": "did:ethr:0x46a7ed5813ce735387df2bfb245bd7722e0de992" + }, + "beneficiaryVASPname": { + "type": "string", + "description": "\"beneficiaryVASPname\" will tell you the name of the VASP that has been identified as the owner of the wallet address. This name is used in a subsequent call to get its DID.", + "example": "Fireblocks" + }, + "warnings": { + "description": "\"errors/warnings\" will tell you what information about the beneficiary you need to collect from the sender.", + "example": [ + "optional-beneficiaryAccountNumber" + ], + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "isValid", + "type", + "beneficiaryAddressType", + "addressSource", + "beneficiaryVASPdid", + "beneficiaryVASPname", + "warnings" + ] + }, + "description": "Validate Full Travel Rule Transaction.\n\nValidate Full Travel Rule transactions.\n\nChecks for all required information on the originator and beneficiary VASPs.\n\n**Note:** The reference content in this section documents the Travel Rule beta endpoint. The beta endpoint includes APIs that are currently in preview and aren't yet generally available.\n\nTo enroll in the beta and enable this endpoint, contact your Fireblocks Customer Success Manager or send an email to [CSM@fireblocks.com](mailto:CSM@fireblocks.com)." + }, + { + "method": "get", + "path": "/screening/travel_rule/vasp/{did}", + "name": "screening_travel_rule_vasp_getByDid", + "parameters": [ + { + "type": "object", + "properties": { + "did": { + "type": "string" + }, + "query": { + "type": "object", + "properties": { + "order": { + "type": "string", + "description": "Field to order by" + }, + "per_page": { + "type": "number", + "description": "Records per page" + }, + "page": { + "type": "number", + "description": "Page number" + }, + "fields": { + "type": "string", + "description": "CSV of fields to return (all, \"blank\" or see list of all field names below)" + } + }, + "required": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "did": { + "type": "string" + }, + "name": { + "type": "string" + }, + "verificationStatus": { + "type": "string" + }, + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "emailDomains": { + "type": "string" + }, + "website": { + "type": "string" + }, + "logo": { + "type": "string" + }, + "legalStructure": { + "type": "string" + }, + "legalName": { + "type": "string" + }, + "yearFounded": { + "type": "string" + }, + "incorporationCountry": { + "type": "string" + }, + "isRegulated": { + "type": "string" + }, + "otherNames": { + "type": "string" + }, + "identificationType": { + "type": "string" + }, + "identificationCountry": { + "type": "string" + }, + "businessNumber": { + "type": "string" + }, + "regulatoryAuthorities": { + "type": "string" + }, + "jurisdictions": { + "type": "string" + }, + "street": { + "type": "string" + }, + "number": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "postCode": { + "type": "string" + }, + "state": { + "type": "string" + }, + "certificates": { + "type": "string" + }, + "description": { + "type": "string" + }, + "travelRule_OPENVASP": { + "type": "string" + }, + "travelRule_SYGNA": { + "type": "string" + }, + "travelRule_TRISA": { + "type": "string" + }, + "travelRule_TRLIGHT": { + "type": "string" + }, + "travelRule_EMAIL": { + "type": "string" + }, + "travelRule_TRP": { + "type": "string" + }, + "travelRule_SHYFT": { + "type": "string" + }, + "travelRule_USTRAVELRULEWG": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "lastSentDate": { + "type": "string" + }, + "lastReceivedDate": { + "type": "string" + }, + "documents": { + "type": "string" + }, + "hasAdmin": { + "type": "boolean" + }, + "isNotifiable": { + "type": "boolean" + }, + "issuers": { + "type": "object", + "properties": { + "yearFounded": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "isRegulated": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "regulatoryAuthorities": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "name": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "logo": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "website": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "legalName": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "legalStructure": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "incorporationCountry": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "businessNumber": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "addressLine1": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "city": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "country": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "description": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + } + }, + "required": [ + "yearFounded", + "isRegulated", + "regulatoryAuthorities", + "name", + "logo", + "website", + "legalName", + "legalStructure", + "incorporationCountry", + "businessNumber", + "addressLine1", + "city", + "country", + "description" + ] + } + }, + "required": [ + "did", + "name", + "verificationStatus", + "addressLine1", + "addressLine2", + "city", + "country", + "emailDomains", + "website", + "logo", + "legalStructure", + "legalName", + "yearFounded", + "incorporationCountry", + "isRegulated", + "otherNames", + "identificationType", + "identificationCountry", + "businessNumber", + "regulatoryAuthorities", + "jurisdictions", + "street", + "number", + "unit", + "postCode", + "state", + "certificates", + "description", + "travelRule_OPENVASP", + "travelRule_SYGNA", + "travelRule_TRISA", + "travelRule_TRLIGHT", + "travelRule_EMAIL", + "travelRule_TRP", + "travelRule_SHYFT", + "travelRule_USTRAVELRULEWG", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "lastSentDate", + "lastReceivedDate", + "documents", + "hasAdmin", + "isNotifiable", + "issuers" + ] + }, + "description": "Get VASP details.\n\nGet VASP Details.\n\nReturns information about a VASP that has the specified DID.\n\n**Note:** The reference content in this section documents the Travel Rule beta endpoint. The beta endpoint includes APIs that are currently in preview and aren't yet generally available.\n\nTo enroll in the beta and enable this endpoint, contact your Fireblocks Customer Success Manager or send an email to [CSM@fireblocks.com](mailto:CSM@fireblocks.com)." + }, + { + "method": "get", + "path": "/screening/travel_rule/vasp", + "name": "screening_travel_rule_vasp_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "order": { + "type": "string", + "description": "Field to order by" + }, + "per_page": { + "type": "number", + "description": "Records per page" + }, + "page": { + "type": "number", + "description": "Page number" + }, + "fields": { + "type": "string", + "description": "CSV of fields to return (all, \"blank\" or see list of all field names below)" + } + }, + "required": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "vasps": { + "type": "array", + "items": { + "type": "object", + "properties": { + "did": { + "type": "string" + }, + "name": { + "type": "string" + }, + "verificationStatus": { + "type": "string" + }, + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "emailDomains": { + "type": "string" + }, + "website": { + "type": "string" + }, + "logo": { + "type": "string" + }, + "legalStructure": { + "type": "string" + }, + "legalName": { + "type": "string" + }, + "yearFounded": { + "type": "string" + }, + "incorporationCountry": { + "type": "string" + }, + "isRegulated": { + "type": "string" + }, + "otherNames": { + "type": "string" + }, + "identificationType": { + "type": "string" + }, + "identificationCountry": { + "type": "string" + }, + "businessNumber": { + "type": "string" + }, + "regulatoryAuthorities": { + "type": "string" + }, + "jurisdictions": { + "type": "string" + }, + "street": { + "type": "string" + }, + "number": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "postCode": { + "type": "string" + }, + "state": { + "type": "string" + }, + "certificates": { + "type": "string" + }, + "description": { + "type": "string" + }, + "travelRule_OPENVASP": { + "type": "string" + }, + "travelRule_SYGNA": { + "type": "string" + }, + "travelRule_TRISA": { + "type": "string" + }, + "travelRule_TRLIGHT": { + "type": "string" + }, + "travelRule_EMAIL": { + "type": "string" + }, + "travelRule_TRP": { + "type": "string" + }, + "travelRule_SHYFT": { + "type": "string" + }, + "travelRule_USTRAVELRULEWG": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "lastSentDate": { + "type": "string" + }, + "lastReceivedDate": { + "type": "string" + }, + "documents": { + "type": "string" + }, + "hasAdmin": { + "type": "boolean" + }, + "isNotifiable": { + "type": "boolean" + }, + "issuers": { + "type": "object", + "properties": { + "yearFounded": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "isRegulated": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "regulatoryAuthorities": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "name": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "logo": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "website": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "legalName": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "legalStructure": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "incorporationCountry": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "businessNumber": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "addressLine1": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "city": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "country": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "description": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + } + }, + "required": [ + "yearFounded", + "isRegulated", + "regulatoryAuthorities", + "name", + "logo", + "website", + "legalName", + "legalStructure", + "incorporationCountry", + "businessNumber", + "addressLine1", + "city", + "country", + "description" + ] + } + }, + "required": [ + "did", + "name", + "verificationStatus", + "addressLine1", + "addressLine2", + "city", + "country", + "emailDomains", + "website", + "logo", + "legalStructure", + "legalName", + "yearFounded", + "incorporationCountry", + "isRegulated", + "otherNames", + "identificationType", + "identificationCountry", + "businessNumber", + "regulatoryAuthorities", + "jurisdictions", + "street", + "number", + "unit", + "postCode", + "state", + "certificates", + "description", + "travelRule_OPENVASP", + "travelRule_SYGNA", + "travelRule_TRISA", + "travelRule_TRLIGHT", + "travelRule_EMAIL", + "travelRule_TRP", + "travelRule_SHYFT", + "travelRule_USTRAVELRULEWG", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "lastSentDate", + "lastReceivedDate", + "documents", + "hasAdmin", + "isNotifiable", + "issuers" + ] + } + } + }, + "required": [ + "vasps" + ] + }, + "description": "Get All VASPs.\n\nReturns a list of VASPs. VASPs can be searched and sorted and results are paginated.\n\n**Note:** The reference content in this section documents the Travel Rule beta endpoint. The beta endpoint includes APIs that are currently in preview and aren't yet generally available.\n\nTo enroll in the beta and enable this endpoint, contact your Fireblocks Customer Success Manager or send an email to [CSM@fireblocks.com](mailto:CSM@fireblocks.com)." + }, + { + "method": "put", + "path": "/screeening/travel_rule/vasp/update", + "name": "screeening_travel_rule_vasp_update_put", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "did": { + "type": "string", + "example": "did:ethr:0x44957e75d6ce4a5bf37aae117da86422c848f7c2", + "description": "The decentralized identifier of the VASP" + }, + "pii_didkey": { + "type": "string", + "example": "did:key:z6Mks5CZRaiooKYhq5TwtXQC1gWhwiZnmiKfFrMnYY62MhYf", + "description": "The PII DID key of the VASP" + } + }, + "required": [ + "did", + "pii_didkey" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "did": { + "type": "string", + "example": "did:ethr:0x44957e75d6ce4a5bf37aae117da86422c848f7c2", + "description": "The decentralized identifier of the VASP" + }, + "pii_didkey": { + "type": "string", + "example": "did:key:z6Mks5CZRaiooKYhq5TwtXQC1gWhwiZnmiKfFrMnYY62MhYf", + "description": "The PII DID key of the VASP" + } + }, + "required": [ + "did", + "pii_didkey" + ] + }, + "description": "Add jsonDidKey to VASP details.\n\nUpdate VASP Details.\n\nUpdates a VASP with the provided parameters. Use this endpoint to add your public jsonDIDkey generated by Notabene.\n\n**Note:** The reference content in this section documents the Travel Rule beta endpoint. The beta endpoint includes APIs that are currently in preview and aren't yet generally available.\n\nTo enroll in the beta and enable this endpoint, contact your Fireblocks Customer Success Manager or send an email to [CSM@fireblocks.com](mailto:CSM@fireblocks.com)." + }, + { + "method": "get", + "path": "/tap/active_policy", + "name": "tap_active_policy_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "description": "Policy validation", + "properties": { + "policy": { + "type": "object", + "description": "Response object for policy operations", + "properties": { + "rules": { + "type": "array", + "description": "A set of policy rules", + "items": { + "type": "object", + "description": "Policy rule which is enforced on transactions", + "properties": { + "operator": { + "type": "string", + "description": "(deprecated - replaced by \"operators\") | Defines users who can initiate the type of transaction to which the rule applies. options are * \"*\" - All users are allowed * Specific User id", + "deprecated": true + }, + "operators": { + "type": "object", + "description": "Defines users/groups who can initiate the type of transaction to which the rule applies.", + "properties": { + "wildcard": { + "type": "string", + "enum": [ + "*" + ], + "description": "If used then this property should appear as the only child property\n* \"*\" - All users are allowed\n" + }, + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + }, + "services": { + "type": "array", + "description": "set of services to initiate transactions", + "items": { + "type": "string" + } + } + } + }, + "transactionType": { + "type": "string", + "enum": [ + "TRANSFER", + "CONTRACT_CALL", + "APPROVE", + "MINT", + "BURN", + "SUPPLY", + "REDEEM", + "STAKE", + "RAW", + "TYPED_MESSAGE" + ], + "description": "Defines the type of transaction to which the rule applies.\n * TRANSFER - Default. Transfers funds from one account to another\n * CONTRACT_CALL - Calls a smart contract, mainly for DeFi operations.\n * APPROVE - Allows a smart contract to withdraw from a designated wallet.\n * MINT - Perform a mint operation (increase supply) on a supported token\n * BURN - Perform a burn operation (reduce supply) on a supported token\n * SUPPLY - Use for DeFi to lend assets\n * REDEEM - Use for DeFi to get lending back\n * STAKE - Allows you to allocate and lock certain assets for earning staking rewards.\n * RAW - An off-chain message with no predefined format, use it to sign any message with your private key.\n * TYPED_MESSAGE - An off-chain message type that follows a predefined format, used to sign specific messages that are not actual transactions.\n" + }, + "designatedSigner": { + "type": "string", + "description": "(deprecated - replaced by \"designatedSigners\") Id representing the user who signs transactions that match a specific rule", + "deprecated": true + }, + "designatedSigners": { + "type": "object", + "description": "Set of ids representing the users who signs transactions that match a specific rule", + "properties": { + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "TRANSFER" + ], + "description": "Policy rule type" + }, + "action": { + "type": "string", + "enum": [ + "ALLOW", + "BLOCK", + "2-TIER" + ], + "description": "Defines what occurs when a transaction meets the rule's criteria\n* ALLOW - The transaction goes through and can be signed without requiring additional approvals\n* BLOCK - The transaction is automatically blocked\n* 2-TIER - Only these users or user groups can approve \n If any of them reject the transaction before the required approval threshold is met, the transaction doesn't go through\n The list of entities are set is \"authorizationGroups\" field\n" + }, + "asset": { + "type": "string", + "description": "Defines the type of asset being transacted, options are\n* \"*\" - All assets\n* Specific asset\n" + }, + "srcType": { + "description": "(deprecated - replaced by \"src\") source account type" + }, + "srcSubType": { + "description": "(deprecated - replaced by \"src\") source sub account type" + }, + "srcId": { + "description": "(deprecated - replaced by \"src\") source account id" + }, + "src": { + "type": "object", + "description": "Defines source accounts the rule allows transfers to originate from", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstType": { + "description": "(deprecated - replaced by \"dst\") destination account type" + }, + "dstSubType": { + "description": "(deprecated - replaced by \"dst\") destination sub account type" + }, + "dstId": { + "description": "(deprecated - replaced by \"dst\") destination account id" + }, + "dst": { + "type": "object", + "description": "Defines the destination accounts the rule allows transfers to", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstAddressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME", + "*" + ], + "description": "Defines whether the destination to which you are sending funds must be whitelisted, to allow one-time transfers to non-whitelisted external addresses, or both.\nBy default, you can only transfer to an external address after it’s whitelisted.\n * WHITELISTED - Can only be sent to whitelisted addresses.\n * ONE_TIME - Can only be sent to non-whitelisted external addresses.\n * \"*\" - can be sent to whitelisted addresses or non-whitelisted external\n" + }, + "amountCurrency": { + "type": "string", + "enum": [ + "USD", + "EUR", + "NATIVE" + ], + "description": "* USD - Limits the amount of any asset users can transfer based on the USD equivalent of the asset.\n* EUR - Limits the amount of any asset users can transfer based on the EURO equivalent of the asset.\n* NATIVE - Limits the amount of an asset a user can transfer when using a specific asset.\n" + }, + "amountScope": { + "type": "string", + "enum": [ + "SINGLE_TX", + "TIMEFRAME" + ], + "description": "* SINGLE_TX - limit applies to a single transaction\n* TIMEFRAME - limit applies to all transactions within the defined time period\n" + }, + "amount": { + "type": "number", + "description": "Defines the value a transaction must exceed for the rule to apply to it (according to the amountCurrency field)" + }, + "periodSec": { + "type": "number", + "description": "Time period in seconds applied by the amountScope field to accumulate transferred amounts in transactions that match the rule, until the total exceeds the value you specify under Minimum.\nWhen the specified amount is reached within that period, whether by one or many transactions, further transactions in that period either fail or require more approvals.\n" + }, + "authorizers": { + "type": "array", + "description": "(deprecated - replaced by \"authorizationGroups\") Allowed entities which can approves a transaction", + "deprecated": true, + "items": { + "type": "string" + } + }, + "authorizersCount": { + "type": "number", + "description": "(deprecated - replaced by \"authorizationGroups\") Min amount of entities which are needed to approve a transaction", + "deprecated": true + }, + "authorizationGroups": { + "type": "object", + "description": "Defines the transaction approval terms", + "properties": { + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ], + "description": "* AND - requires approval of all authorization groups\n* OR - requires approval of at least one of the authorization groups\n" + }, + "allowOperatorAsAuthorizer": { + "type": "boolean", + "description": "Defines whether the user who initiates a transaction can approve their own transaction and count toward the approval threshold for their transaction" + }, + "groups": { + "type": "array", + "description": "Groups of entities which can approve the transaction", + "items": { + "type": "object", + "properties": { + "users": { + "type": "array", + "description": "User ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Group ids", + "items": { + "type": "string" + } + }, + "th": { + "type": "number", + "description": "Represents the min amount of entities which are required to approve the transaction, default is 1." + } + } + } + } + } + }, + "amountAggregation": { + "type": "object", + "description": "Defines the method by which the Policy Engine calculates accumulation.\nIt uses the Initiator, Source, and Destination to calculate accumulation toward the value under Minimum, for the time under Time Period.\n", + "properties": { + "operators": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "srcTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "dstTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + } + } + }, + "rawMessageSigning": { + "type": "object", + "description": "Raw message signing configuration", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "object", + "properties": { + "path": { + "type": "array", + "items": { + "type": "number" + } + } + } + } + } + }, + "applyForApprove": { + "type": "boolean", + "description": "Applying this rule over APPROVE type transactions (can only be enabled when rule's transaction type is TRANSFER)" + }, + "applyForTypedMessage": { + "type": "boolean", + "description": "Applying this rule over TYPED_MESSAGE type transactions (can only be enabled when rule's transaction type is CONTRACT_CALL)" + }, + "externalDescriptor": { + "type": "string", + "description": "A unique id identifying the rule" + } + }, + "required": [ + "type", + "action", + "asset", + "amountCurrency", + "amountScope", + "amount", + "periodSec", + "externalDescriptor" + ] + } + }, + "metadata": { + "type": "object", + "description": "Policy related metadata", + "properties": { + "editedBy": { + "type": "string", + "description": "The user id of the user who last edited the policy" + }, + "editedAt": { + "type": "string", + "description": "The timestamp of the last edit of the policy" + }, + "publishedBy": { + "type": "string", + "description": "The user id of the user who last published the policy" + }, + "publishedAt": { + "type": "string", + "description": "The timestamp of the last publish of the policy" + } + } + } + }, + "required": [ + "rules", + "metadata" + ] + }, + "validation": { + "type": "object", + "description": "Policy validation object", + "properties": { + "status": { + "type": "string", + "description": "Validation status" + }, + "checkResult": { + "type": "object", + "description": "Policy rules validation result", + "properties": { + "errors": { + "type": "number", + "description": "Number of errors" + }, + "result": { + "type": "array", + "description": "A set of validation results", + "items": { + "type": "object", + "description": "The rule validation result", + "properties": { + "index": { + "type": "number", + "description": "Rule index number in the policy" + }, + "status": { + "type": "string", + "enum": [ + "ok", + "failure" + ], + "description": "Validation status" + }, + "errors": { + "type": "array", + "description": "A set of rule validation error objects", + "items": { + "type": "object", + "description": "Rule validation result error", + "properties": { + "errorMessage": { + "type": "string", + "description": "Error message" + }, + "errorCode": { + "type": "number", + "description": "error code" + }, + "errorCodeName": { + "type": "string", + "description": "error code name" + }, + "errorField": { + "type": "string", + "enum": [ + "operator", + "operators", + "authorizationGroups", + "designatedSigner", + "designatedSigners", + "contractMethods", + "amountAggregation", + "src", + "dst" + ], + "description": "The field which the error relates to\n* operator - transaction initiator\n* operators - transaction initiators\n* authorizationGroups - transaction authorizer groups\n* designatedSigner - transaction signer\n* designatedSigners - transaction signers\n* contractMethods - contract methods\n* amountAggregation - transaction amount aggregation configuration\n* src - transaction source asset configuration\n* dst - transaction destination asset configuration\n" + } + }, + "required": [ + "errorMessage", + "errorCode", + "errorCodeName", + "errorField" + ] + } + } + }, + "required": [ + "index", + "status", + "errors" + ] + } + } + }, + "required": [ + "errors", + "result" + ] + } + }, + "required": [ + "status", + "checkResult" + ] + } + }, + "required": [ + "policy", + "validation" + ] + }, + "description": "Get the active policy and its validation.\n\nReturns the active policy and its validation.
\n**Note:** These endpoints are currently in beta and might be subject to changes.\nIf you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "get", + "path": "/tap/draft", + "name": "tap_draft_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "description": "Draft validation", + "properties": { + "draftResponse": { + "type": "object", + "description": "Response object for draft operations", + "properties": { + "status": { + "type": "string", + "description": "Operation status" + }, + "rules": { + "type": "array", + "description": "Draft rules", + "items": { + "type": "object", + "description": "Policy rule which is enforced on transactions", + "properties": { + "operator": { + "type": "string", + "description": "(deprecated - replaced by \"operators\") | Defines users who can initiate the type of transaction to which the rule applies. options are * \"*\" - All users are allowed * Specific User id", + "deprecated": true + }, + "operators": { + "type": "object", + "description": "Defines users/groups who can initiate the type of transaction to which the rule applies.", + "properties": { + "wildcard": { + "type": "string", + "enum": [ + "*" + ], + "description": "If used then this property should appear as the only child property\n* \"*\" - All users are allowed\n" + }, + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + }, + "services": { + "type": "array", + "description": "set of services to initiate transactions", + "items": { + "type": "string" + } + } + } + }, + "transactionType": { + "type": "string", + "enum": [ + "TRANSFER", + "CONTRACT_CALL", + "APPROVE", + "MINT", + "BURN", + "SUPPLY", + "REDEEM", + "STAKE", + "RAW", + "TYPED_MESSAGE" + ], + "description": "Defines the type of transaction to which the rule applies.\n * TRANSFER - Default. Transfers funds from one account to another\n * CONTRACT_CALL - Calls a smart contract, mainly for DeFi operations.\n * APPROVE - Allows a smart contract to withdraw from a designated wallet.\n * MINT - Perform a mint operation (increase supply) on a supported token\n * BURN - Perform a burn operation (reduce supply) on a supported token\n * SUPPLY - Use for DeFi to lend assets\n * REDEEM - Use for DeFi to get lending back\n * STAKE - Allows you to allocate and lock certain assets for earning staking rewards.\n * RAW - An off-chain message with no predefined format, use it to sign any message with your private key.\n * TYPED_MESSAGE - An off-chain message type that follows a predefined format, used to sign specific messages that are not actual transactions.\n" + }, + "designatedSigner": { + "type": "string", + "description": "(deprecated - replaced by \"designatedSigners\") Id representing the user who signs transactions that match a specific rule", + "deprecated": true + }, + "designatedSigners": { + "type": "object", + "description": "Set of ids representing the users who signs transactions that match a specific rule", + "properties": { + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "TRANSFER" + ], + "description": "Policy rule type" + }, + "action": { + "type": "string", + "enum": [ + "ALLOW", + "BLOCK", + "2-TIER" + ], + "description": "Defines what occurs when a transaction meets the rule's criteria\n* ALLOW - The transaction goes through and can be signed without requiring additional approvals\n* BLOCK - The transaction is automatically blocked\n* 2-TIER - Only these users or user groups can approve \n If any of them reject the transaction before the required approval threshold is met, the transaction doesn't go through\n The list of entities are set is \"authorizationGroups\" field\n" + }, + "asset": { + "type": "string", + "description": "Defines the type of asset being transacted, options are\n* \"*\" - All assets\n* Specific asset\n" + }, + "srcType": { + "description": "(deprecated - replaced by \"src\") source account type" + }, + "srcSubType": { + "description": "(deprecated - replaced by \"src\") source sub account type" + }, + "srcId": { + "description": "(deprecated - replaced by \"src\") source account id" + }, + "src": { + "type": "object", + "description": "Defines source accounts the rule allows transfers to originate from", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstType": { + "description": "(deprecated - replaced by \"dst\") destination account type" + }, + "dstSubType": { + "description": "(deprecated - replaced by \"dst\") destination sub account type" + }, + "dstId": { + "description": "(deprecated - replaced by \"dst\") destination account id" + }, + "dst": { + "type": "object", + "description": "Defines the destination accounts the rule allows transfers to", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstAddressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME", + "*" + ], + "description": "Defines whether the destination to which you are sending funds must be whitelisted, to allow one-time transfers to non-whitelisted external addresses, or both.\nBy default, you can only transfer to an external address after it’s whitelisted.\n * WHITELISTED - Can only be sent to whitelisted addresses.\n * ONE_TIME - Can only be sent to non-whitelisted external addresses.\n * \"*\" - can be sent to whitelisted addresses or non-whitelisted external\n" + }, + "amountCurrency": { + "type": "string", + "enum": [ + "USD", + "EUR", + "NATIVE" + ], + "description": "* USD - Limits the amount of any asset users can transfer based on the USD equivalent of the asset.\n* EUR - Limits the amount of any asset users can transfer based on the EURO equivalent of the asset.\n* NATIVE - Limits the amount of an asset a user can transfer when using a specific asset.\n" + }, + "amountScope": { + "type": "string", + "enum": [ + "SINGLE_TX", + "TIMEFRAME" + ], + "description": "* SINGLE_TX - limit applies to a single transaction\n* TIMEFRAME - limit applies to all transactions within the defined time period\n" + }, + "amount": { + "type": "number", + "description": "Defines the value a transaction must exceed for the rule to apply to it (according to the amountCurrency field)" + }, + "periodSec": { + "type": "number", + "description": "Time period in seconds applied by the amountScope field to accumulate transferred amounts in transactions that match the rule, until the total exceeds the value you specify under Minimum.\nWhen the specified amount is reached within that period, whether by one or many transactions, further transactions in that period either fail or require more approvals.\n" + }, + "authorizers": { + "type": "array", + "description": "(deprecated - replaced by \"authorizationGroups\") Allowed entities which can approves a transaction", + "deprecated": true, + "items": { + "type": "string" + } + }, + "authorizersCount": { + "type": "number", + "description": "(deprecated - replaced by \"authorizationGroups\") Min amount of entities which are needed to approve a transaction", + "deprecated": true + }, + "authorizationGroups": { + "type": "object", + "description": "Defines the transaction approval terms", + "properties": { + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ], + "description": "* AND - requires approval of all authorization groups\n* OR - requires approval of at least one of the authorization groups\n" + }, + "allowOperatorAsAuthorizer": { + "type": "boolean", + "description": "Defines whether the user who initiates a transaction can approve their own transaction and count toward the approval threshold for their transaction" + }, + "groups": { + "type": "array", + "description": "Groups of entities which can approve the transaction", + "items": { + "type": "object", + "properties": { + "users": { + "type": "array", + "description": "User ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Group ids", + "items": { + "type": "string" + } + }, + "th": { + "type": "number", + "description": "Represents the min amount of entities which are required to approve the transaction, default is 1." + } + } + } + } + } + }, + "amountAggregation": { + "type": "object", + "description": "Defines the method by which the Policy Engine calculates accumulation.\nIt uses the Initiator, Source, and Destination to calculate accumulation toward the value under Minimum, for the time under Time Period.\n", + "properties": { + "operators": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "srcTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "dstTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + } + } + }, + "rawMessageSigning": { + "type": "object", + "description": "Raw message signing configuration", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "object", + "properties": { + "path": { + "type": "array", + "items": { + "type": "number" + } + } + } + } + } + }, + "applyForApprove": { + "type": "boolean", + "description": "Applying this rule over APPROVE type transactions (can only be enabled when rule's transaction type is TRANSFER)" + }, + "applyForTypedMessage": { + "type": "boolean", + "description": "Applying this rule over TYPED_MESSAGE type transactions (can only be enabled when rule's transaction type is CONTRACT_CALL)" + }, + "externalDescriptor": { + "type": "string", + "description": "A unique id identifying the rule" + } + }, + "required": [ + "type", + "action", + "asset", + "amountCurrency", + "amountScope", + "amount", + "periodSec", + "externalDescriptor" + ] + } + }, + "draftId": { + "type": "string", + "description": "Draft unique id" + }, + "metadata": { + "type": "object", + "description": "Policy related metadata", + "properties": { + "editedBy": { + "type": "string", + "description": "The user id of the user who last edited the policy" + }, + "editedAt": { + "type": "string", + "description": "The timestamp of the last edit of the policy" + }, + "publishedBy": { + "type": "string", + "description": "The user id of the user who last published the policy" + }, + "publishedAt": { + "type": "string", + "description": "The timestamp of the last publish of the policy" + } + } + } + }, + "required": [ + "draftId", + "status", + "rules", + "metadata" + ] + }, + "validation": { + "type": "object", + "description": "Policy validation object", + "properties": { + "status": { + "type": "string", + "description": "Validation status" + }, + "checkResult": { + "type": "object", + "description": "Policy rules validation result", + "properties": { + "errors": { + "type": "number", + "description": "Number of errors" + }, + "result": { + "type": "array", + "description": "A set of validation results", + "items": { + "type": "object", + "description": "The rule validation result", + "properties": { + "index": { + "type": "number", + "description": "Rule index number in the policy" + }, + "status": { + "type": "string", + "enum": [ + "ok", + "failure" + ], + "description": "Validation status" + }, + "errors": { + "type": "array", + "description": "A set of rule validation error objects", + "items": { + "type": "object", + "description": "Rule validation result error", + "properties": { + "errorMessage": { + "type": "string", + "description": "Error message" + }, + "errorCode": { + "type": "number", + "description": "error code" + }, + "errorCodeName": { + "type": "string", + "description": "error code name" + }, + "errorField": { + "type": "string", + "enum": [ + "operator", + "operators", + "authorizationGroups", + "designatedSigner", + "designatedSigners", + "contractMethods", + "amountAggregation", + "src", + "dst" + ], + "description": "The field which the error relates to\n* operator - transaction initiator\n* operators - transaction initiators\n* authorizationGroups - transaction authorizer groups\n* designatedSigner - transaction signer\n* designatedSigners - transaction signers\n* contractMethods - contract methods\n* amountAggregation - transaction amount aggregation configuration\n* src - transaction source asset configuration\n* dst - transaction destination asset configuration\n" + } + }, + "required": [ + "errorMessage", + "errorCode", + "errorCodeName", + "errorField" + ] + } + } + }, + "required": [ + "index", + "status", + "errors" + ] + } + } + }, + "required": [ + "errors", + "result" + ] + } + }, + "required": [ + "status", + "checkResult" + ] + } + }, + "required": [ + "draftResponse", + "validation" + ] + }, + "description": "Get the active draft.\n\nReturns the active draft and its validation.
\n**Note:** These endpoints are currently in beta and might be subject to changes.\nIf you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "post", + "path": "/tap/draft", + "name": "tap_draft_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": {} + } + } + ], + "output": { + "type": "object", + "description": "Response object of the publish policy operation", + "properties": { + "status": { + "type": "string", + "enum": [ + "SUCCESS", + "UNVALIDATED", + "INVALID_CONFIGURATION", + "PENDING", + "PENDING_CONSOLE_APPROVAL", + "AWAITING_QUORUM", + "UNHANDLED_ERROR" + ], + "description": "* SUCCESS - success\n* UNVALIDATED - not validated yet\n* INVALID_CONFIGURATION - at least one rule is invalid\n* PENDING - pending approval\n* PENDING_CONSOLE_APPROVAL - pending approval from the console app\n* AWAITING_QUORUM - pending quorum approval\n* UNHANDLED_ERROR - unhandled error\n" + }, + "rules": { + "type": "array", + "items": { + "type": "object", + "description": "Policy rule which is enforced on transactions", + "properties": { + "operator": { + "type": "string", + "description": "(deprecated - replaced by \"operators\") | Defines users who can initiate the type of transaction to which the rule applies. options are * \"*\" - All users are allowed * Specific User id", + "deprecated": true + }, + "operators": { + "type": "object", + "description": "Defines users/groups who can initiate the type of transaction to which the rule applies.", + "properties": { + "wildcard": { + "type": "string", + "enum": [ + "*" + ], + "description": "If used then this property should appear as the only child property\n* \"*\" - All users are allowed\n" + }, + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + }, + "services": { + "type": "array", + "description": "set of services to initiate transactions", + "items": { + "type": "string" + } + } + } + }, + "transactionType": { + "type": "string", + "enum": [ + "TRANSFER", + "CONTRACT_CALL", + "APPROVE", + "MINT", + "BURN", + "SUPPLY", + "REDEEM", + "STAKE", + "RAW", + "TYPED_MESSAGE" + ], + "description": "Defines the type of transaction to which the rule applies.\n * TRANSFER - Default. Transfers funds from one account to another\n * CONTRACT_CALL - Calls a smart contract, mainly for DeFi operations.\n * APPROVE - Allows a smart contract to withdraw from a designated wallet.\n * MINT - Perform a mint operation (increase supply) on a supported token\n * BURN - Perform a burn operation (reduce supply) on a supported token\n * SUPPLY - Use for DeFi to lend assets\n * REDEEM - Use for DeFi to get lending back\n * STAKE - Allows you to allocate and lock certain assets for earning staking rewards.\n * RAW - An off-chain message with no predefined format, use it to sign any message with your private key.\n * TYPED_MESSAGE - An off-chain message type that follows a predefined format, used to sign specific messages that are not actual transactions.\n" + }, + "designatedSigner": { + "type": "string", + "description": "(deprecated - replaced by \"designatedSigners\") Id representing the user who signs transactions that match a specific rule", + "deprecated": true + }, + "designatedSigners": { + "type": "object", + "description": "Set of ids representing the users who signs transactions that match a specific rule", + "properties": { + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "TRANSFER" + ], + "description": "Policy rule type" + }, + "action": { + "type": "string", + "enum": [ + "ALLOW", + "BLOCK", + "2-TIER" + ], + "description": "Defines what occurs when a transaction meets the rule's criteria\n* ALLOW - The transaction goes through and can be signed without requiring additional approvals\n* BLOCK - The transaction is automatically blocked\n* 2-TIER - Only these users or user groups can approve \n If any of them reject the transaction before the required approval threshold is met, the transaction doesn't go through\n The list of entities are set is \"authorizationGroups\" field\n" + }, + "asset": { + "type": "string", + "description": "Defines the type of asset being transacted, options are\n* \"*\" - All assets\n* Specific asset\n" + }, + "srcType": { + "description": "(deprecated - replaced by \"src\") source account type" + }, + "srcSubType": { + "description": "(deprecated - replaced by \"src\") source sub account type" + }, + "srcId": { + "description": "(deprecated - replaced by \"src\") source account id" + }, + "src": { + "type": "object", + "description": "Defines source accounts the rule allows transfers to originate from", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstType": { + "description": "(deprecated - replaced by \"dst\") destination account type" + }, + "dstSubType": { + "description": "(deprecated - replaced by \"dst\") destination sub account type" + }, + "dstId": { + "description": "(deprecated - replaced by \"dst\") destination account id" + }, + "dst": { + "type": "object", + "description": "Defines the destination accounts the rule allows transfers to", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstAddressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME", + "*" + ], + "description": "Defines whether the destination to which you are sending funds must be whitelisted, to allow one-time transfers to non-whitelisted external addresses, or both.\nBy default, you can only transfer to an external address after it’s whitelisted.\n * WHITELISTED - Can only be sent to whitelisted addresses.\n * ONE_TIME - Can only be sent to non-whitelisted external addresses.\n * \"*\" - can be sent to whitelisted addresses or non-whitelisted external\n" + }, + "amountCurrency": { + "type": "string", + "enum": [ + "USD", + "EUR", + "NATIVE" + ], + "description": "* USD - Limits the amount of any asset users can transfer based on the USD equivalent of the asset.\n* EUR - Limits the amount of any asset users can transfer based on the EURO equivalent of the asset.\n* NATIVE - Limits the amount of an asset a user can transfer when using a specific asset.\n" + }, + "amountScope": { + "type": "string", + "enum": [ + "SINGLE_TX", + "TIMEFRAME" + ], + "description": "* SINGLE_TX - limit applies to a single transaction\n* TIMEFRAME - limit applies to all transactions within the defined time period\n" + }, + "amount": { + "type": "number", + "description": "Defines the value a transaction must exceed for the rule to apply to it (according to the amountCurrency field)" + }, + "periodSec": { + "type": "number", + "description": "Time period in seconds applied by the amountScope field to accumulate transferred amounts in transactions that match the rule, until the total exceeds the value you specify under Minimum.\nWhen the specified amount is reached within that period, whether by one or many transactions, further transactions in that period either fail or require more approvals.\n" + }, + "authorizers": { + "type": "array", + "description": "(deprecated - replaced by \"authorizationGroups\") Allowed entities which can approves a transaction", + "deprecated": true, + "items": { + "type": "string" + } + }, + "authorizersCount": { + "type": "number", + "description": "(deprecated - replaced by \"authorizationGroups\") Min amount of entities which are needed to approve a transaction", + "deprecated": true + }, + "authorizationGroups": { + "type": "object", + "description": "Defines the transaction approval terms", + "properties": { + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ], + "description": "* AND - requires approval of all authorization groups\n* OR - requires approval of at least one of the authorization groups\n" + }, + "allowOperatorAsAuthorizer": { + "type": "boolean", + "description": "Defines whether the user who initiates a transaction can approve their own transaction and count toward the approval threshold for their transaction" + }, + "groups": { + "type": "array", + "description": "Groups of entities which can approve the transaction", + "items": { + "type": "object", + "properties": { + "users": { + "type": "array", + "description": "User ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Group ids", + "items": { + "type": "string" + } + }, + "th": { + "type": "number", + "description": "Represents the min amount of entities which are required to approve the transaction, default is 1." + } + } + } + } + } + }, + "amountAggregation": { + "type": "object", + "description": "Defines the method by which the Policy Engine calculates accumulation.\nIt uses the Initiator, Source, and Destination to calculate accumulation toward the value under Minimum, for the time under Time Period.\n", + "properties": { + "operators": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "srcTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "dstTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + } + } + }, + "rawMessageSigning": { + "type": "object", + "description": "Raw message signing configuration", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "object", + "properties": { + "path": { + "type": "array", + "items": { + "type": "number" + } + } + } + } + } + }, + "applyForApprove": { + "type": "boolean", + "description": "Applying this rule over APPROVE type transactions (can only be enabled when rule's transaction type is TRANSFER)" + }, + "applyForTypedMessage": { + "type": "boolean", + "description": "Applying this rule over TYPED_MESSAGE type transactions (can only be enabled when rule's transaction type is CONTRACT_CALL)" + }, + "externalDescriptor": { + "type": "string", + "description": "A unique id identifying the rule" + } + }, + "required": [ + "type", + "action", + "asset", + "amountCurrency", + "amountScope", + "amount", + "periodSec", + "externalDescriptor" + ] + } + }, + "checkResult": { + "type": "object", + "description": "Policy rules validation result", + "properties": { + "errors": { + "type": "number", + "description": "Number of errors" + }, + "result": { + "type": "array", + "description": "A set of validation results", + "items": { + "type": "object", + "description": "The rule validation result", + "properties": { + "index": { + "type": "number", + "description": "Rule index number in the policy" + }, + "status": { + "type": "string", + "enum": [ + "ok", + "failure" + ], + "description": "Validation status" + }, + "errors": { + "type": "array", + "description": "A set of rule validation error objects", + "items": { + "type": "object", + "description": "Rule validation result error", + "properties": { + "errorMessage": { + "type": "string", + "description": "Error message" + }, + "errorCode": { + "type": "number", + "description": "error code" + }, + "errorCodeName": { + "type": "string", + "description": "error code name" + }, + "errorField": { + "type": "string", + "enum": [ + "operator", + "operators", + "authorizationGroups", + "designatedSigner", + "designatedSigners", + "contractMethods", + "amountAggregation", + "src", + "dst" + ], + "description": "The field which the error relates to\n* operator - transaction initiator\n* operators - transaction initiators\n* authorizationGroups - transaction authorizer groups\n* designatedSigner - transaction signer\n* designatedSigners - transaction signers\n* contractMethods - contract methods\n* amountAggregation - transaction amount aggregation configuration\n* src - transaction source asset configuration\n* dst - transaction destination asset configuration\n" + } + }, + "required": [ + "errorMessage", + "errorCode", + "errorCodeName", + "errorField" + ] + } + } + }, + "required": [ + "index", + "status", + "errors" + ] + } + } + }, + "required": [ + "errors", + "result" + ] + }, + "metadata": { + "type": "object", + "description": "Policy related metadata", + "properties": { + "editedBy": { + "type": "string", + "description": "The user id of the user who last edited the policy" + }, + "editedAt": { + "type": "string", + "description": "The timestamp of the last edit of the policy" + }, + "publishedBy": { + "type": "string", + "description": "The user id of the user who last published the policy" + }, + "publishedAt": { + "type": "string", + "description": "The timestamp of the last publish of the policy" + } + } + } + }, + "required": [ + "status", + "rules", + "checkResult", + "metadata" + ] + }, + "description": "Send publish request for a certain draft id.\n\nSend publish request of certain draft id and returns the response.
\n**Note:** These endpoints are currently in beta and might be subject to changes.\nIf you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "put", + "path": "/tap/draft", + "name": "tap_draft_put", + "parameters": [ + { + "type": "object", + "properties": { + "body": {} + } + } + ], + "output": { + "type": "object", + "description": "Draft validation", + "properties": { + "draftResponse": { + "type": "object", + "description": "Response object for draft operations", + "properties": { + "status": { + "type": "string", + "description": "Operation status" + }, + "rules": { + "type": "array", + "description": "Draft rules", + "items": { + "type": "object", + "description": "Policy rule which is enforced on transactions", + "properties": { + "operator": { + "type": "string", + "description": "(deprecated - replaced by \"operators\") | Defines users who can initiate the type of transaction to which the rule applies. options are * \"*\" - All users are allowed * Specific User id", + "deprecated": true + }, + "operators": { + "type": "object", + "description": "Defines users/groups who can initiate the type of transaction to which the rule applies.", + "properties": { + "wildcard": { + "type": "string", + "enum": [ + "*" + ], + "description": "If used then this property should appear as the only child property\n* \"*\" - All users are allowed\n" + }, + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + }, + "services": { + "type": "array", + "description": "set of services to initiate transactions", + "items": { + "type": "string" + } + } + } + }, + "transactionType": { + "type": "string", + "enum": [ + "TRANSFER", + "CONTRACT_CALL", + "APPROVE", + "MINT", + "BURN", + "SUPPLY", + "REDEEM", + "STAKE", + "RAW", + "TYPED_MESSAGE" + ], + "description": "Defines the type of transaction to which the rule applies.\n * TRANSFER - Default. Transfers funds from one account to another\n * CONTRACT_CALL - Calls a smart contract, mainly for DeFi operations.\n * APPROVE - Allows a smart contract to withdraw from a designated wallet.\n * MINT - Perform a mint operation (increase supply) on a supported token\n * BURN - Perform a burn operation (reduce supply) on a supported token\n * SUPPLY - Use for DeFi to lend assets\n * REDEEM - Use for DeFi to get lending back\n * STAKE - Allows you to allocate and lock certain assets for earning staking rewards.\n * RAW - An off-chain message with no predefined format, use it to sign any message with your private key.\n * TYPED_MESSAGE - An off-chain message type that follows a predefined format, used to sign specific messages that are not actual transactions.\n" + }, + "designatedSigner": { + "type": "string", + "description": "(deprecated - replaced by \"designatedSigners\") Id representing the user who signs transactions that match a specific rule", + "deprecated": true + }, + "designatedSigners": { + "type": "object", + "description": "Set of ids representing the users who signs transactions that match a specific rule", + "properties": { + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "TRANSFER" + ], + "description": "Policy rule type" + }, + "action": { + "type": "string", + "enum": [ + "ALLOW", + "BLOCK", + "2-TIER" + ], + "description": "Defines what occurs when a transaction meets the rule's criteria\n* ALLOW - The transaction goes through and can be signed without requiring additional approvals\n* BLOCK - The transaction is automatically blocked\n* 2-TIER - Only these users or user groups can approve \n If any of them reject the transaction before the required approval threshold is met, the transaction doesn't go through\n The list of entities are set is \"authorizationGroups\" field\n" + }, + "asset": { + "type": "string", + "description": "Defines the type of asset being transacted, options are\n* \"*\" - All assets\n* Specific asset\n" + }, + "srcType": { + "description": "(deprecated - replaced by \"src\") source account type" + }, + "srcSubType": { + "description": "(deprecated - replaced by \"src\") source sub account type" + }, + "srcId": { + "description": "(deprecated - replaced by \"src\") source account id" + }, + "src": { + "type": "object", + "description": "Defines source accounts the rule allows transfers to originate from", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstType": { + "description": "(deprecated - replaced by \"dst\") destination account type" + }, + "dstSubType": { + "description": "(deprecated - replaced by \"dst\") destination sub account type" + }, + "dstId": { + "description": "(deprecated - replaced by \"dst\") destination account id" + }, + "dst": { + "type": "object", + "description": "Defines the destination accounts the rule allows transfers to", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstAddressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME", + "*" + ], + "description": "Defines whether the destination to which you are sending funds must be whitelisted, to allow one-time transfers to non-whitelisted external addresses, or both.\nBy default, you can only transfer to an external address after it’s whitelisted.\n * WHITELISTED - Can only be sent to whitelisted addresses.\n * ONE_TIME - Can only be sent to non-whitelisted external addresses.\n * \"*\" - can be sent to whitelisted addresses or non-whitelisted external\n" + }, + "amountCurrency": { + "type": "string", + "enum": [ + "USD", + "EUR", + "NATIVE" + ], + "description": "* USD - Limits the amount of any asset users can transfer based on the USD equivalent of the asset.\n* EUR - Limits the amount of any asset users can transfer based on the EURO equivalent of the asset.\n* NATIVE - Limits the amount of an asset a user can transfer when using a specific asset.\n" + }, + "amountScope": { + "type": "string", + "enum": [ + "SINGLE_TX", + "TIMEFRAME" + ], + "description": "* SINGLE_TX - limit applies to a single transaction\n* TIMEFRAME - limit applies to all transactions within the defined time period\n" + }, + "amount": { + "type": "number", + "description": "Defines the value a transaction must exceed for the rule to apply to it (according to the amountCurrency field)" + }, + "periodSec": { + "type": "number", + "description": "Time period in seconds applied by the amountScope field to accumulate transferred amounts in transactions that match the rule, until the total exceeds the value you specify under Minimum.\nWhen the specified amount is reached within that period, whether by one or many transactions, further transactions in that period either fail or require more approvals.\n" + }, + "authorizers": { + "type": "array", + "description": "(deprecated - replaced by \"authorizationGroups\") Allowed entities which can approves a transaction", + "deprecated": true, + "items": { + "type": "string" + } + }, + "authorizersCount": { + "type": "number", + "description": "(deprecated - replaced by \"authorizationGroups\") Min amount of entities which are needed to approve a transaction", + "deprecated": true + }, + "authorizationGroups": { + "type": "object", + "description": "Defines the transaction approval terms", + "properties": { + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ], + "description": "* AND - requires approval of all authorization groups\n* OR - requires approval of at least one of the authorization groups\n" + }, + "allowOperatorAsAuthorizer": { + "type": "boolean", + "description": "Defines whether the user who initiates a transaction can approve their own transaction and count toward the approval threshold for their transaction" + }, + "groups": { + "type": "array", + "description": "Groups of entities which can approve the transaction", + "items": { + "type": "object", + "properties": { + "users": { + "type": "array", + "description": "User ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Group ids", + "items": { + "type": "string" + } + }, + "th": { + "type": "number", + "description": "Represents the min amount of entities which are required to approve the transaction, default is 1." + } + } + } + } + } + }, + "amountAggregation": { + "type": "object", + "description": "Defines the method by which the Policy Engine calculates accumulation.\nIt uses the Initiator, Source, and Destination to calculate accumulation toward the value under Minimum, for the time under Time Period.\n", + "properties": { + "operators": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "srcTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "dstTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + } + } + }, + "rawMessageSigning": { + "type": "object", + "description": "Raw message signing configuration", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "object", + "properties": { + "path": { + "type": "array", + "items": { + "type": "number" + } + } + } + } + } + }, + "applyForApprove": { + "type": "boolean", + "description": "Applying this rule over APPROVE type transactions (can only be enabled when rule's transaction type is TRANSFER)" + }, + "applyForTypedMessage": { + "type": "boolean", + "description": "Applying this rule over TYPED_MESSAGE type transactions (can only be enabled when rule's transaction type is CONTRACT_CALL)" + }, + "externalDescriptor": { + "type": "string", + "description": "A unique id identifying the rule" + } + }, + "required": [ + "type", + "action", + "asset", + "amountCurrency", + "amountScope", + "amount", + "periodSec", + "externalDescriptor" + ] + } + }, + "draftId": { + "type": "string", + "description": "Draft unique id" + }, + "metadata": { + "type": "object", + "description": "Policy related metadata", + "properties": { + "editedBy": { + "type": "string", + "description": "The user id of the user who last edited the policy" + }, + "editedAt": { + "type": "string", + "description": "The timestamp of the last edit of the policy" + }, + "publishedBy": { + "type": "string", + "description": "The user id of the user who last published the policy" + }, + "publishedAt": { + "type": "string", + "description": "The timestamp of the last publish of the policy" + } + } + } + }, + "required": [ + "draftId", + "status", + "rules", + "metadata" + ] + }, + "validation": { + "type": "object", + "description": "Policy validation object", + "properties": { + "status": { + "type": "string", + "description": "Validation status" + }, + "checkResult": { + "type": "object", + "description": "Policy rules validation result", + "properties": { + "errors": { + "type": "number", + "description": "Number of errors" + }, + "result": { + "type": "array", + "description": "A set of validation results", + "items": { + "type": "object", + "description": "The rule validation result", + "properties": { + "index": { + "type": "number", + "description": "Rule index number in the policy" + }, + "status": { + "type": "string", + "enum": [ + "ok", + "failure" + ], + "description": "Validation status" + }, + "errors": { + "type": "array", + "description": "A set of rule validation error objects", + "items": { + "type": "object", + "description": "Rule validation result error", + "properties": { + "errorMessage": { + "type": "string", + "description": "Error message" + }, + "errorCode": { + "type": "number", + "description": "error code" + }, + "errorCodeName": { + "type": "string", + "description": "error code name" + }, + "errorField": { + "type": "string", + "enum": [ + "operator", + "operators", + "authorizationGroups", + "designatedSigner", + "designatedSigners", + "contractMethods", + "amountAggregation", + "src", + "dst" + ], + "description": "The field which the error relates to\n* operator - transaction initiator\n* operators - transaction initiators\n* authorizationGroups - transaction authorizer groups\n* designatedSigner - transaction signer\n* designatedSigners - transaction signers\n* contractMethods - contract methods\n* amountAggregation - transaction amount aggregation configuration\n* src - transaction source asset configuration\n* dst - transaction destination asset configuration\n" + } + }, + "required": [ + "errorMessage", + "errorCode", + "errorCodeName", + "errorField" + ] + } + } + }, + "required": [ + "index", + "status", + "errors" + ] + } + } + }, + "required": [ + "errors", + "result" + ] + } + }, + "required": [ + "status", + "checkResult" + ] + } + }, + "required": [ + "draftResponse", + "validation" + ] + }, + "description": "Update the draft with a new set of rules.\n\nUpdate the draft and return its validation.
\n**Note:** These endpoints are currently in beta and might be subject to changes.\nIf you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "post", + "path": "/tap/publish", + "name": "tap_publish_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": {} + } + } + ], + "output": { + "type": "object", + "description": "Response object of the publish policy operation", + "properties": { + "status": { + "type": "string", + "enum": [ + "SUCCESS", + "UNVALIDATED", + "INVALID_CONFIGURATION", + "PENDING", + "PENDING_CONSOLE_APPROVAL", + "AWAITING_QUORUM", + "UNHANDLED_ERROR" + ], + "description": "* SUCCESS - success\n* UNVALIDATED - not validated yet\n* INVALID_CONFIGURATION - at least one rule is invalid\n* PENDING - pending approval\n* PENDING_CONSOLE_APPROVAL - pending approval from the console app\n* AWAITING_QUORUM - pending quorum approval\n* UNHANDLED_ERROR - unhandled error\n" + }, + "rules": { + "type": "array", + "items": { + "type": "object", + "description": "Policy rule which is enforced on transactions", + "properties": { + "operator": { + "type": "string", + "description": "(deprecated - replaced by \"operators\") | Defines users who can initiate the type of transaction to which the rule applies. options are * \"*\" - All users are allowed * Specific User id", + "deprecated": true + }, + "operators": { + "type": "object", + "description": "Defines users/groups who can initiate the type of transaction to which the rule applies.", + "properties": { + "wildcard": { + "type": "string", + "enum": [ + "*" + ], + "description": "If used then this property should appear as the only child property\n* \"*\" - All users are allowed\n" + }, + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + }, + "services": { + "type": "array", + "description": "set of services to initiate transactions", + "items": { + "type": "string" + } + } + } + }, + "transactionType": { + "type": "string", + "enum": [ + "TRANSFER", + "CONTRACT_CALL", + "APPROVE", + "MINT", + "BURN", + "SUPPLY", + "REDEEM", + "STAKE", + "RAW", + "TYPED_MESSAGE" + ], + "description": "Defines the type of transaction to which the rule applies.\n * TRANSFER - Default. Transfers funds from one account to another\n * CONTRACT_CALL - Calls a smart contract, mainly for DeFi operations.\n * APPROVE - Allows a smart contract to withdraw from a designated wallet.\n * MINT - Perform a mint operation (increase supply) on a supported token\n * BURN - Perform a burn operation (reduce supply) on a supported token\n * SUPPLY - Use for DeFi to lend assets\n * REDEEM - Use for DeFi to get lending back\n * STAKE - Allows you to allocate and lock certain assets for earning staking rewards.\n * RAW - An off-chain message with no predefined format, use it to sign any message with your private key.\n * TYPED_MESSAGE - An off-chain message type that follows a predefined format, used to sign specific messages that are not actual transactions.\n" + }, + "designatedSigner": { + "type": "string", + "description": "(deprecated - replaced by \"designatedSigners\") Id representing the user who signs transactions that match a specific rule", + "deprecated": true + }, + "designatedSigners": { + "type": "object", + "description": "Set of ids representing the users who signs transactions that match a specific rule", + "properties": { + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "TRANSFER" + ], + "description": "Policy rule type" + }, + "action": { + "type": "string", + "enum": [ + "ALLOW", + "BLOCK", + "2-TIER" + ], + "description": "Defines what occurs when a transaction meets the rule's criteria\n* ALLOW - The transaction goes through and can be signed without requiring additional approvals\n* BLOCK - The transaction is automatically blocked\n* 2-TIER - Only these users or user groups can approve \n If any of them reject the transaction before the required approval threshold is met, the transaction doesn't go through\n The list of entities are set is \"authorizationGroups\" field\n" + }, + "asset": { + "type": "string", + "description": "Defines the type of asset being transacted, options are\n* \"*\" - All assets\n* Specific asset\n" + }, + "srcType": { + "description": "(deprecated - replaced by \"src\") source account type" + }, + "srcSubType": { + "description": "(deprecated - replaced by \"src\") source sub account type" + }, + "srcId": { + "description": "(deprecated - replaced by \"src\") source account id" + }, + "src": { + "type": "object", + "description": "Defines source accounts the rule allows transfers to originate from", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstType": { + "description": "(deprecated - replaced by \"dst\") destination account type" + }, + "dstSubType": { + "description": "(deprecated - replaced by \"dst\") destination sub account type" + }, + "dstId": { + "description": "(deprecated - replaced by \"dst\") destination account id" + }, + "dst": { + "type": "object", + "description": "Defines the destination accounts the rule allows transfers to", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstAddressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME", + "*" + ], + "description": "Defines whether the destination to which you are sending funds must be whitelisted, to allow one-time transfers to non-whitelisted external addresses, or both.\nBy default, you can only transfer to an external address after it’s whitelisted.\n * WHITELISTED - Can only be sent to whitelisted addresses.\n * ONE_TIME - Can only be sent to non-whitelisted external addresses.\n * \"*\" - can be sent to whitelisted addresses or non-whitelisted external\n" + }, + "amountCurrency": { + "type": "string", + "enum": [ + "USD", + "EUR", + "NATIVE" + ], + "description": "* USD - Limits the amount of any asset users can transfer based on the USD equivalent of the asset.\n* EUR - Limits the amount of any asset users can transfer based on the EURO equivalent of the asset.\n* NATIVE - Limits the amount of an asset a user can transfer when using a specific asset.\n" + }, + "amountScope": { + "type": "string", + "enum": [ + "SINGLE_TX", + "TIMEFRAME" + ], + "description": "* SINGLE_TX - limit applies to a single transaction\n* TIMEFRAME - limit applies to all transactions within the defined time period\n" + }, + "amount": { + "type": "number", + "description": "Defines the value a transaction must exceed for the rule to apply to it (according to the amountCurrency field)" + }, + "periodSec": { + "type": "number", + "description": "Time period in seconds applied by the amountScope field to accumulate transferred amounts in transactions that match the rule, until the total exceeds the value you specify under Minimum.\nWhen the specified amount is reached within that period, whether by one or many transactions, further transactions in that period either fail or require more approvals.\n" + }, + "authorizers": { + "type": "array", + "description": "(deprecated - replaced by \"authorizationGroups\") Allowed entities which can approves a transaction", + "deprecated": true, + "items": { + "type": "string" + } + }, + "authorizersCount": { + "type": "number", + "description": "(deprecated - replaced by \"authorizationGroups\") Min amount of entities which are needed to approve a transaction", + "deprecated": true + }, + "authorizationGroups": { + "type": "object", + "description": "Defines the transaction approval terms", + "properties": { + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ], + "description": "* AND - requires approval of all authorization groups\n* OR - requires approval of at least one of the authorization groups\n" + }, + "allowOperatorAsAuthorizer": { + "type": "boolean", + "description": "Defines whether the user who initiates a transaction can approve their own transaction and count toward the approval threshold for their transaction" + }, + "groups": { + "type": "array", + "description": "Groups of entities which can approve the transaction", + "items": { + "type": "object", + "properties": { + "users": { + "type": "array", + "description": "User ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Group ids", + "items": { + "type": "string" + } + }, + "th": { + "type": "number", + "description": "Represents the min amount of entities which are required to approve the transaction, default is 1." + } + } + } + } + } + }, + "amountAggregation": { + "type": "object", + "description": "Defines the method by which the Policy Engine calculates accumulation.\nIt uses the Initiator, Source, and Destination to calculate accumulation toward the value under Minimum, for the time under Time Period.\n", + "properties": { + "operators": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "srcTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "dstTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + } + } + }, + "rawMessageSigning": { + "type": "object", + "description": "Raw message signing configuration", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "object", + "properties": { + "path": { + "type": "array", + "items": { + "type": "number" + } + } + } + } + } + }, + "applyForApprove": { + "type": "boolean", + "description": "Applying this rule over APPROVE type transactions (can only be enabled when rule's transaction type is TRANSFER)" + }, + "applyForTypedMessage": { + "type": "boolean", + "description": "Applying this rule over TYPED_MESSAGE type transactions (can only be enabled when rule's transaction type is CONTRACT_CALL)" + }, + "externalDescriptor": { + "type": "string", + "description": "A unique id identifying the rule" + } + }, + "required": [ + "type", + "action", + "asset", + "amountCurrency", + "amountScope", + "amount", + "periodSec", + "externalDescriptor" + ] + } + }, + "checkResult": { + "type": "object", + "description": "Policy rules validation result", + "properties": { + "errors": { + "type": "number", + "description": "Number of errors" + }, + "result": { + "type": "array", + "description": "A set of validation results", + "items": { + "type": "object", + "description": "The rule validation result", + "properties": { + "index": { + "type": "number", + "description": "Rule index number in the policy" + }, + "status": { + "type": "string", + "enum": [ + "ok", + "failure" + ], + "description": "Validation status" + }, + "errors": { + "type": "array", + "description": "A set of rule validation error objects", + "items": { + "type": "object", + "description": "Rule validation result error", + "properties": { + "errorMessage": { + "type": "string", + "description": "Error message" + }, + "errorCode": { + "type": "number", + "description": "error code" + }, + "errorCodeName": { + "type": "string", + "description": "error code name" + }, + "errorField": { + "type": "string", + "enum": [ + "operator", + "operators", + "authorizationGroups", + "designatedSigner", + "designatedSigners", + "contractMethods", + "amountAggregation", + "src", + "dst" + ], + "description": "The field which the error relates to\n* operator - transaction initiator\n* operators - transaction initiators\n* authorizationGroups - transaction authorizer groups\n* designatedSigner - transaction signer\n* designatedSigners - transaction signers\n* contractMethods - contract methods\n* amountAggregation - transaction amount aggregation configuration\n* src - transaction source asset configuration\n* dst - transaction destination asset configuration\n" + } + }, + "required": [ + "errorMessage", + "errorCode", + "errorCodeName", + "errorField" + ] + } + } + }, + "required": [ + "index", + "status", + "errors" + ] + } + } + }, + "required": [ + "errors", + "result" + ] + }, + "metadata": { + "type": "object", + "description": "Policy related metadata", + "properties": { + "editedBy": { + "type": "string", + "description": "The user id of the user who last edited the policy" + }, + "editedAt": { + "type": "string", + "description": "The timestamp of the last edit of the policy" + }, + "publishedBy": { + "type": "string", + "description": "The user id of the user who last published the policy" + }, + "publishedAt": { + "type": "string", + "description": "The timestamp of the last publish of the policy" + } + } + } + }, + "required": [ + "status", + "rules", + "checkResult", + "metadata" + ] + }, + "description": "Send publish request for a set of policy rules.\n\nSend publish request of set of policy rules and returns the response.
\n**Note:** These endpoints are currently in beta and might be subject to changes.\nIf you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + } + ], + "errors": [ + { + "method": "post", + "path": "/off_exchange/settlements/trader", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/off_exchange/settlements/transactions", + "messages": [ + "Failed to escape $ref" + ] + } + ], + "options": { + "keyword": true, + "separate": null + } +} \ No newline at end of file diff --git a/examples/keyword/iamport.json b/examples/keyword/iamport.json new file mode 100644 index 0000000..79deab3 --- /dev/null +++ b/examples/keyword/iamport.json @@ -0,0 +1,6803 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "get", + "path": "/certifications/{imp_uid}", + "name": "certifications_getByImp_uid", + "parameters": [ + { + "type": "object", + "properties": { + "imp_uid": { + "type": "string", + "description": "대상 본인인증 정보의 " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "imp_uid": { + "description": "아임포트가 발급해 준 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "서비스로부터의 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "name": { + "description": "본인인증대상자 성명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "gender": { + "description": "성별.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "birth": { + "description": "생년월일.\n\n리눅스 타임이 쓰인다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "birthday": { + "description": "생년월일, YYYYMMDD 형식.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "foreigner": { + "type": "boolean", + "description": "외국인 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "phone": { + "description": "본인인증 대상자 핸드폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "carrier": { + "type": "string", + "enum": [ + "SKT", + "KT", + "LGT" + ], + "description": "본인인증 대상자 통신사 코드.", + "x-typia-required": true, + "x-typia-optional": false + }, + "certified": { + "type": "boolean", + "description": "OTP 인증 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "certified_at": { + "description": "OTP 인증 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "unique_key": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "unique_in_site": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "description": "PG 제공자.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "origin": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "__otp": { + "description": "(테스트 전용) OTP 코드.\n\n오직 `fake-iamport-server` 에서만 쓰이는 속성으로써, 본인인증을 시뮬레이션할 때,\n어떠한 OTP 코드가 발급되었는 지를 확인하기 위하여 사용된다. 이를 이용하여\n{@link functional.certifications.otp.confirm } 함수를 호출하면, 본인인증을 완료할\n수 있다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "required": [ + "imp_uid", + "merchant_uid", + "name", + "gender", + "birth", + "birthday", + "foreigner", + "phone", + "carrier", + "certified", + "certified_at", + "unique_key", + "unique_in_site", + "pg_tid", + "pg_provider", + "origin" + ], + "description": "본인 인증 내역.\n\n`IIamportCertification` 은 아임포트의 본인인증 정보를 형상화한 자료구조 인터페이스이다.\n\n단, `IIamportCertification` 레코드의 존재가 곧 본인인증의 완결을 뜻하는 것은 아니다.\n{@link IIamportCertification.certified } 값이 `true` 여야만이 비로소, 본인인증\n대상자가 자신의 핸드폰 번호로 전송된 OTP 를 아임포트의 본인인증 팝업창에 정확히 적어,\n본인인증을 완료했음을 의미한다.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "본인인증 정보 열람하기.\n\n`certiciations.at` 은 본인인증 정보를 열람할 때 사용하는 API 함수이다.\n\n다만 이 API 함수를 통하여 열람한 본인인증 정보 {@link IIamportCertification } 이\n곧 OTP 인증까지 마쳐 본인인증을 모두 마친 레코드라는 보장은 없다. 본인인증의 완결\n여부는 오직, {@link IIamportCertification.certified } 값을 직접 검사해봐야만 알\n수 있기 때문이다." + }, + { + "method": "delete", + "path": "/certifications/{imp_uid}", + "name": "certifications_eraseByImp_uid", + "parameters": [ + { + "type": "object", + "properties": { + "imp_uid": { + "type": "string", + "description": "대상 본인인증 정보의 " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "imp_uid": { + "description": "아임포트가 발급해 준 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "서비스로부터의 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "name": { + "description": "본인인증대상자 성명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "gender": { + "description": "성별.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "birth": { + "description": "생년월일.\n\n리눅스 타임이 쓰인다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "birthday": { + "description": "생년월일, YYYYMMDD 형식.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "foreigner": { + "type": "boolean", + "description": "외국인 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "phone": { + "description": "본인인증 대상자 핸드폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "carrier": { + "type": "string", + "enum": [ + "SKT", + "KT", + "LGT" + ], + "description": "본인인증 대상자 통신사 코드.", + "x-typia-required": true, + "x-typia-optional": false + }, + "certified": { + "type": "boolean", + "description": "OTP 인증 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "certified_at": { + "description": "OTP 인증 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "unique_key": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "unique_in_site": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "description": "PG 제공자.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "origin": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "__otp": { + "description": "(테스트 전용) OTP 코드.\n\n오직 `fake-iamport-server` 에서만 쓰이는 속성으로써, 본인인증을 시뮬레이션할 때,\n어떠한 OTP 코드가 발급되었는 지를 확인하기 위하여 사용된다. 이를 이용하여\n{@link functional.certifications.otp.confirm } 함수를 호출하면, 본인인증을 완료할\n수 있다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "required": [ + "imp_uid", + "merchant_uid", + "name", + "gender", + "birth", + "birthday", + "foreigner", + "phone", + "carrier", + "certified", + "certified_at", + "unique_key", + "unique_in_site", + "pg_tid", + "pg_provider", + "origin" + ], + "description": "본인 인증 내역.\n\n`IIamportCertification` 은 아임포트의 본인인증 정보를 형상화한 자료구조 인터페이스이다.\n\n단, `IIamportCertification` 레코드의 존재가 곧 본인인증의 완결을 뜻하는 것은 아니다.\n{@link IIamportCertification.certified } 값이 `true` 여야만이 비로소, 본인인증\n대상자가 자신의 핸드폰 번호로 전송된 OTP 를 아임포트의 본인인증 팝업창에 정확히 적어,\n본인인증을 완료했음을 의미한다.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "본인인증 정보 삭제하기." + }, + { + "method": "post", + "path": "/certifications/otp/request", + "name": "certifications_otp_request_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "name": { + "description": "본인인증대상자 성명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "phone": { + "description": "본인인증 대상자 핸드폰 번호.\n\n핸드폰 번호에 \"-\" 값이 들어가던 아니던 상관 없음.\n\n다만, 내부적으로는 \"-\" 값을 제거하여 처리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "birth": { + "description": "생년월일.\n\nYYYYMMDD 형식.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "gender_digit": { + "description": "주민등록 뒷부분 첫 자리.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "carrier": { + "type": "string", + "enum": [ + "SKT", + "KT", + "LGT" + ], + "description": "본인인증 대상자 통신사 코드.", + "x-typia-required": true, + "x-typia-optional": false + }, + "is_mvno": { + "type": "boolean", + "description": "알뜰폰 여부.", + "x-typia-required": false, + "x-typia-optional": true + }, + "commpany": { + "description": "가맹점 서비스 명칭 또는 domain URL.\n\nKISA 에서 대상자에게 발송하는 SMS에 안내될 서비스 명칭.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "merchant_uid": { + "description": "귀사 서비스에서의 본인인증 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "pg": { + "description": "PG 사 구분자.\n\n다날 상점아이디를 2개 이상 동시에 사용하시려는 경우에 설정하면 된다.\n\n**danal.{상점아이디}** 형태로 지정.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "required": [ + "name", + "phone", + "birth", + "gender_digit", + "carrier" + ], + "description": "본인 인증 입력 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "imp_uid": { + "description": "본인인증정보의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "imp_uid" + ], + "description": "본인인증 정보의 접근자 구조체.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "본인인증 요청하기.\n\n`certifications.otp.request` 는 아임포트 서버에 본인인증을 요청하는 API 함수이다.\n이 API 를 호출하면 본인인증 대상자의 핸드폰으로 OTP 문자가 전송되며, 본인인증\n대상자가 {@link certifications.otp.confirm } 을 통하여 이 OTP 번호를 정확히\n입력함으로써, 본인인증이 완결된다.\n\n또한 본인인증 대상자가 자신의 핸드폰으로 전송된 OTP 문자를 입력하기 전에도,\n여전히해당 본인인증 내역은 {@link certifications.at } 함수를 통하여 조회할 수 있다.\n다만, 이 때 리턴되는 {@link IIamportCertification } 에서 인증의 완결 여부를\n지칭하는 {@link IIamportCertification.certified } 값은 `false` 이다." + }, + { + "method": "post", + "path": "/certifications/otp/confirm/{imp_uid}", + "name": "certifications_otp_confirm_postByImp_uid", + "parameters": [ + { + "type": "object", + "properties": { + "imp_uid": { + "type": "string", + "description": "대상 본인인증 정보의 " + }, + "body": { + "type": "object", + "properties": { + "otp": { + "description": "SMS 로 전송된 본인인증 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "otp" + ], + "description": "본인인증 승인을 위한 입력 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "imp_uid": { + "description": "아임포트가 발급해 준 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "서비스로부터의 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "name": { + "description": "본인인증대상자 성명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "gender": { + "description": "성별.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "birth": { + "description": "생년월일.\n\n리눅스 타임이 쓰인다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "birthday": { + "description": "생년월일, YYYYMMDD 형식.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "foreigner": { + "type": "boolean", + "description": "외국인 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "phone": { + "description": "본인인증 대상자 핸드폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "carrier": { + "type": "string", + "enum": [ + "SKT", + "KT", + "LGT" + ], + "description": "본인인증 대상자 통신사 코드.", + "x-typia-required": true, + "x-typia-optional": false + }, + "certified": { + "type": "boolean", + "description": "OTP 인증 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "certified_at": { + "description": "OTP 인증 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "unique_key": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "unique_in_site": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "description": "PG 제공자.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "origin": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "__otp": { + "description": "(테스트 전용) OTP 코드.\n\n오직 `fake-iamport-server` 에서만 쓰이는 속성으로써, 본인인증을 시뮬레이션할 때,\n어떠한 OTP 코드가 발급되었는 지를 확인하기 위하여 사용된다. 이를 이용하여\n{@link functional.certifications.otp.confirm } 함수를 호출하면, 본인인증을 완료할\n수 있다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "required": [ + "imp_uid", + "merchant_uid", + "name", + "gender", + "birth", + "birthday", + "foreigner", + "phone", + "carrier", + "certified", + "certified_at", + "unique_key", + "unique_in_site", + "pg_tid", + "pg_provider", + "origin" + ], + "description": "본인 인증 내역.\n\n`IIamportCertification` 은 아임포트의 본인인증 정보를 형상화한 자료구조 인터페이스이다.\n\n단, `IIamportCertification` 레코드의 존재가 곧 본인인증의 완결을 뜻하는 것은 아니다.\n{@link IIamportCertification.certified } 값이 `true` 여야만이 비로소, 본인인증\n대상자가 자신의 핸드폰 번호로 전송된 OTP 를 아임포트의 본인인증 팝업창에 정확히 적어,\n본인인증을 완료했음을 의미한다.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "본인인증 시 발급된 OTP 코드 입력하기.\n\n`certifications.otp.confirm` 는 {@link certifications.otp.request } 를 통하여\n발급된 본인인증 건에 대하여, 본인인증 대상자의 휴대폰으로 전송된 OTP 번호를\n검증하고, 입력한 OTP 번호가 맞거든 해당 본인인증 건을 승인하여 완료 처리해주는\nAPI 함수이다.\n\n이처럼 본인인증을 완료하거든, 해당 본인인증 건 {@link IIamportCertification } 의\n{@link IIamportCertification.certified } 값이 비로소 `true` 로 변경되어,\n비로소 완결된다." + }, + { + "method": "post", + "path": "/internal/webhook", + "name": "internal_webhook_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ], + "description": "현재 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "imp_uid", + "merchant_uid", + "status" + ], + "description": "웹훅 데이터.", + "x-typia-jsDocTags": [] + } + } + } + ], + "description": "웹훅 이벤트 더미 리스너.\n\n`internal.webhook` 은 실제 아임포트의 서버에는 존재하지 않는 API 로써,\n`fake-impoart-server` 의 {@link Configuration.WEBHOOK_URL } 에 아무런 URL 을 설정하지\n않으면, `fake-iamport-server` 로부터 발생하는 모든 종류의 웹훅 이벤트는 이 곳으로 전달되어\n무의미하게 사라진다.\n\n따라서 `fake-iamport-server` 를 사용하여 아임포트 서버와의 연동을 미리 검증코자 할 때는,\n반드시 {@link Configuration.WEBHOOK_URL } 를 설정하여 웹훅 이벤트가 귀하의 백엔드 서버로\n제대로 전달되도록 하자." + }, + { + "method": "get", + "path": "/internal/deposit/{imp_uid}", + "name": "internal_deposit_getByImp_uid", + "parameters": [ + { + "type": "object", + "properties": { + "imp_uid": { + "type": "string", + "description": "대상 결제의 " + } + } + } + ], + "description": "가상 계좌에 입금하기.\n\n`internal.deposit` 은 실제 아임포트 결제 서버에는 존재하지 않는 API 로써, 가상 계좌\n결제를 신청한 고객이, 이후 가상 계좌에 목표 금액을 입금하는 상황을 시뮬레이션 할 수 있는\n함수이다.\n\n즉, `internal.deposit` 는 고객이 스스로에게 가상으로 발급된 계좌에 입금을 하고, 그에 따라\n아임포트 서버에서 webhook 이벤트가 발생, 이를 귀하의 백엔드 서버로 전송하는 일련의 상황을\n시뮬레이션하기 위하여 설계된 테스트 함수다." + }, + { + "method": "get", + "path": "/payments/{imp_uid}", + "name": "payments_getByImp_uid", + "parameters": [ + { + "type": "object", + "properties": { + "imp_uid": { + "type": "string", + "description": "대상 결제 기록의 " + }, + "query": { + "type": "object", + "properties": { + "extension": { + "type": "boolean", + "description": "페이팔의 경우, 이 값을 `true` 로 할 것.", + "x-typia-required": false, + "x-typia-optional": true + } + }, + "description": "결제 수단이 페이팔인 경우, 페이팔의 구매자 보호정책에 의해 결제 승인 시점에\nPending 상태를 만든 후, 내부 심사등을 통해 최종 결제 완료라고 변경함.\n\n`iamport` 의 기술적 이슈로 해당 상태를 status: failed 로 기록함. 추후\n페이팔에서 최종결제완료로 변경된 경우, `iamport` 에서 `paid` 로 변경 후,\n해당건에 대한 웹훅 발송. `iamport` 를 사용하는 고객사에서는, failed 로 이미\n처리된 결제건에 대한 paid 상태의 웹훅을 받는 문제점이 생김.\n\n이에, `iamport` 에서 제공하는 `/payment/{imp_uid}` 에 query-string 으로\n`extension=true` 옵션을 추가해야 함", + "x-typia-jsDocTags": [ + { + "name": "issue", + "text": [ + { + "text": "https://github.com/samchon/fake-iamport-server/issues/13", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Sangjin Han - https://github.com/ltnscp9028", + "kind": "text" + } + ] + } + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "oneOf": [ + { + "type": "object", + "properties": { + "card_code": { + "description": "카드 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "description": "카드 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}" + }, + "card_quota": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "integer" + }, + "apply_num": { + "description": "카드사 승인번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pay_method": { + "type": "string", + "enum": [ + "card", + "samsung" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "card_code", + "card_name", + "card_number", + "card_quota", + "apply_num", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "bank_code": { + "description": "은행 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "bank_name": { + "description": "은행 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pay_method": { + "type": "string", + "enum": [ + "trans" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "bank_code", + "bank_name", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "vbank_code": { + "description": "가상 계좌 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_name": { + "description": "가상 게좌 이름", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_num": { + "description": "가상 계좌 번호", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_holder": { + "description": "가상 계좌 예금주.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_date": { + "description": "가상 계좌 입금 만료 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vbank_issued_at": { + "description": "가상 계좌 개설 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "pay_method": { + "type": "string", + "enum": [ + "vbank" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "vbank_code", + "vbank_name", + "vbank_num", + "vbank_holder", + "vbank_date", + "vbank_issued_at", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "pay_method": { + "type": "string", + "enum": [ + "phone", + "kpay", + "kakaopay", + "payco", + "lpay", + "ssgpay", + "tosspay", + "cultureland", + "smartculture", + "happymoney", + "booknlife", + "point" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "결제 기본 (공통) 정보.", + "x-typia-jsDocTags": [] + } + ], + "description": "결제 정보.\n\n`IIamportPayment` 는 아임포트의 결제 정보를 형상화한 자료구조이자 유니언 타입의\n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.pay_method === \"card\")\n payment.card_number; // payment be IIamportCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "결제 기록 열람하기.\n\n아임포트를 통하여 발생한 결제 기록을 열람한다." + }, + { + "method": "post", + "path": "/payments/cancel", + "name": "payments_cancel_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "취소 금액, 부분 취소도 가능하다.\n\n누락시 전액 취소.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "checksum": { + "description": "취소 트랜잭션 수행 전, 현재 시점의 취소 가능한 잔액.\n\nAPI요청자가 기록하고 있는 취소가능 잔액과 아임포트가 기록하고 있는 취소가능 잔액이\n일치하는지 사전에 검증하고, 검증에 실패하면 트랜잭션을 수행하지 않는다.\n\n`null` 인 경우에는 검증 프로세스를 생략.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number", + "nullable": true + }, + "reason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "tax_free": { + "description": "취소요청금액 중 면세금액.", + "x-typia-jsDocTags": [ + { + "name": "default", + "text": [ + { + "text": "0", + "kind": "text" + } + ] + } + ], + "x-typia-required": false, + "x-typia-optional": true, + "type": "number", + "default": 0 + }, + "refund_holder": { + "description": "환불계좌 예금주.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "refund_bank": { + "description": "환불계좌 은행 코드.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "refund_account": { + "description": "환불계좌 계좌번호.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "refund_tel": { + "description": "환불계좌 예금주 연락처", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "required": [ + "imp_uid", + "merchant_uid", + "checksum", + "reason" + ], + "description": "결제 취소 입력 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "oneOf": [ + { + "type": "object", + "properties": { + "card_code": { + "description": "카드 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "description": "카드 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}" + }, + "card_quota": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "integer" + }, + "apply_num": { + "description": "카드사 승인번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pay_method": { + "type": "string", + "enum": [ + "card", + "samsung" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "card_code", + "card_name", + "card_number", + "card_quota", + "apply_num", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "bank_code": { + "description": "은행 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "bank_name": { + "description": "은행 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pay_method": { + "type": "string", + "enum": [ + "trans" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "bank_code", + "bank_name", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "vbank_code": { + "description": "가상 계좌 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_name": { + "description": "가상 게좌 이름", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_num": { + "description": "가상 계좌 번호", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_holder": { + "description": "가상 계좌 예금주.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_date": { + "description": "가상 계좌 입금 만료 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vbank_issued_at": { + "description": "가상 계좌 개설 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "pay_method": { + "type": "string", + "enum": [ + "vbank" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "vbank_code", + "vbank_name", + "vbank_num", + "vbank_holder", + "vbank_date", + "vbank_issued_at", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "pay_method": { + "type": "string", + "enum": [ + "phone", + "kpay", + "kakaopay", + "payco", + "lpay", + "ssgpay", + "tosspay", + "cultureland", + "smartculture", + "happymoney", + "booknlife", + "point" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "결제 기본 (공통) 정보.", + "x-typia-jsDocTags": [] + } + ], + "description": "결제 정보.\n\n`IIamportPayment` 는 아임포트의 결제 정보를 형상화한 자료구조이자 유니언 타입의\n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.pay_method === \"card\")\n payment.card_number; // payment be IIamportCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "결제 취소하기.\n\n만약 가상 계좌를 통한 결제였다면, 반드시 환불 계좌 정보를 입력해줘야 한다." + }, + { + "method": "get", + "path": "/receipts/{imp_uid}", + "name": "receipts_getByImp_uid", + "parameters": [ + { + "type": "object", + "properties": { + "imp_uid": { + "type": "string", + "description": "귀속 결제의 " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "imp_uid": { + "description": "귀속 결제의 {@link IIamportPayment.imp_uid }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_uid": { + "description": "현금 영수증의 고유 식별자 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "apply_num": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "person", + "company" + ], + "description": "현금영수증 발행 타입 (대상)." + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "receipt_url": { + "description": "현금영수증 조회 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "applied_at": { + "description": "현금영수증 발행 시간.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "현금영수증 취소 시간.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "required": [ + "imp_uid", + "receipt_uid", + "apply_num", + "type", + "amount", + "vat", + "receipt_url", + "applied_at", + "cancelled_at" + ], + "description": "현금 영수증 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "현금 영수증 조회하기." + }, + { + "method": "post", + "path": "/receipts/{imp_uid}", + "name": "receipts_postByImp_uid", + "parameters": [ + { + "type": "object", + "properties": { + "imp_uid": { + "type": "string", + "description": "귀속 결제의 " + }, + "body": { + "type": "object", + "properties": { + "imp_uid": { + "description": "귀속 결제의 {@link IIamportPayment.imp_uid }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "identifier": { + "description": "현금영수증 발생대상 식별정보.\n\n - 국세청현금영수증카드\n - 휴대폰번호\n - 주민등록번호\n - 사업자등록번호", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "identifier_type": { + "type": "string", + "enum": [ + "phone", + "person", + "business", + "taxcard" + ], + "description": "현금영수증 발행대상 유형.\n\n - person: 주민등록번호\n - business: 사업자등록번호\n - phone: 휴대폰번호\n - taxcard: 국세청현금영수증카드\n\n일부 PG 사의 경우 이 항목이 없어 된다는데, 어지간하면 그냥 쓰기 바람.", + "x-typia-required": false, + "x-typia-optional": true + }, + "type": { + "type": "string", + "enum": [ + "person", + "company" + ], + "description": "현금영수증 발행 타입 (대상).\n\n누락시 person 이 사용됨.", + "x-typia-required": false, + "x-typia-optional": true + }, + "buyer_name": { + "description": "구매자 이름.\n\n형금영수증 발행건 사후 추적을 위해 가급 입력하기 바람.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_email": { + "description": "구매자 이메일.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_tel": { + "description": "구매자 전화번호.\n\n현금영수증 발행건 사후 추적을 위해 가급 입력하기 바람.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "tax_free": { + "description": "면세 금액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + } + }, + "required": [ + "imp_uid", + "identifier" + ], + "description": "현금영수증 입력 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "imp_uid": { + "description": "귀속 결제의 {@link IIamportPayment.imp_uid }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_uid": { + "description": "현금 영수증의 고유 식별자 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "apply_num": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "person", + "company" + ], + "description": "현금영수증 발행 타입 (대상)." + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "receipt_url": { + "description": "현금영수증 조회 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "applied_at": { + "description": "현금영수증 발행 시간.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "현금영수증 취소 시간.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "required": [ + "imp_uid", + "receipt_uid", + "apply_num", + "type", + "amount", + "vat", + "receipt_url", + "applied_at", + "cancelled_at" + ], + "description": "현금 영수증 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "현금 영수증 발행하기." + }, + { + "method": "delete", + "path": "/receipts/{imp_uid}", + "name": "receipts_eraseByImp_uid", + "parameters": [ + { + "type": "object", + "properties": { + "imp_uid": { + "type": "string", + "description": "귀속 결제의 " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "imp_uid": { + "description": "귀속 결제의 {@link IIamportPayment.imp_uid }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_uid": { + "description": "현금 영수증의 고유 식별자 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "apply_num": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "person", + "company" + ], + "description": "현금영수증 발행 타입 (대상)." + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "receipt_url": { + "description": "현금영수증 조회 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "applied_at": { + "description": "현금영수증 발행 시간.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "현금영수증 취소 시간.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "required": [ + "imp_uid", + "receipt_uid", + "apply_num", + "type", + "amount", + "vat", + "receipt_url", + "applied_at", + "cancelled_at" + ], + "description": "현금 영수증 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "현금 영수증 취소하기." + }, + { + "method": "post", + "path": "/users/getToken", + "name": "users_getToken_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "imp_key": { + "description": "API 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "imp_secret": { + "description": "Secret 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "imp_key", + "imp_secret" + ], + "description": "아임포트에서 부여해 준 API 및 secret 키.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "now": { + "description": "토큰 발행 시간.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "expired_at": { + "description": "토큰 만료 시간.\n\n리눅스 타임이 기준이며, 이를 JS 에서 사용하려거든, 아래와 같이 변환해야 한다.\n\n```typescript\nnew Date(user.expired_at * 1_000);\n```", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "access_token": { + "description": "유저 인증 토큰.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "now", + "expired_at", + "access_token" + ], + "description": "아임포트 유저 인증 정보.\n\n아임포트는 고객사에게 API 및 secret 키 정보, {@link IIamportUser.IAccessor } 를 발급해준다.\n\n하지만 이를 곧장 아임포트의 유저 인증에 사용할 수는 없고, 해당 API 및 secret 키를 토대로 유저\n인증 토큰을 발급받아야 하는데, 이 유저 인증 토큰에는 하필이면 만로 시간이라는 게 존재한다.\n`IIamportUser` 는 바로 이러한 유저 인증 토큰 및 그것의 만료 시간을 형상화한 자료구조\n인터페이스이다.\n\n더하여 이처럼 만료 시간이 존재하는 아임포트의 유저 인증 토큰의 특성상, 이것의 만료 시간이\n초과되지 않도록 관리하는 것은 매우 힘든 일이다. 이에 `iamport-server-api` 에서는 아임포트\n유저 인증 토큰이 만료될 때마다 자동 갱신해주는, {@link IamportConnector } 클래스를 제공한다.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "유저 인증 토큰 발행하기.\n\n아임포트에 가입하여 부여받은 API 및 secret 키를 토대로, 유저 인증 토큰을 발행한다.\n\n단, 아임포트가 발급해주는 유저 인증 토큰에는 유효 시간 {@link IIamportUser.expired_at }\n이 있어, 해당 시간이 지나거든 기 발급 토큰이 만료되어 더 이상 쓸 수 없게 된다. 때문에\n아임포트의 이러한 시간 제한에 구애받지 않고 자유로이 아임포트의 API 를 이용하고 싶다면,\n`iamport-server-api` 에서 제공해주는 {@link IamportConnector } 를 활용하도록 하자." + }, + { + "method": "post", + "path": "/vbanks", + "name": "vbanks_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vbank_code": { + "description": "가상계좌 은행 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_due": { + "description": "가상계좌 입금기한, 유닉스 타임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vbank_holder": { + "description": "예금주.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_email": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_tel": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_addr": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_postcode": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "pg": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "notice_url": { + "description": "가상 계좌 입금 정보를 수신할 URL.\n\n누락시 기본 웹훅 URL 사용.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "custom_data": { + "description": "커스텀 데이터, 자유롭게 사용 가능.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "pg_api_key": { + "description": "[이니시스 전용] 가맹점 콘솔에서 확인한 API 값.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "required": [ + "merchant_uid", + "amount", + "vbank_code", + "vbank_due", + "vbank_holder" + ], + "description": "가상 계좌 결제 입력 정보.\n\n가상 계좌를 임의 생성할 수 있다.\n\n단, 일부 PG 사 혹은 `fake-iamport-server` 만 가능.\n\n - 세틀뱅크\n - 나이스페이먼츠\n - KG이니시스", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "vbank_code": { + "description": "가상 계좌 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_name": { + "description": "가상 게좌 이름", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_num": { + "description": "가상 계좌 번호", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_holder": { + "description": "가상 계좌 예금주.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_date": { + "description": "가상 계좌 입금 만료 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vbank_issued_at": { + "description": "가상 계좌 개설 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "pay_method": { + "type": "string", + "enum": [ + "vbank" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "vbank_code", + "vbank_name", + "vbank_num", + "vbank_holder", + "vbank_date", + "vbank_issued_at", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "가상 계좌 발급하기." + }, + { + "method": "put", + "path": "/vbanks", + "name": "vbanks_put", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "imp_uid": { + "description": "대상 결제 기록의 {@link IIamportPayment.imp_uid }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "수정할 결제 금액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "vbank_due": { + "description": "수정할 가상계좌 입금 기한.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + } + }, + "required": [ + "imp_uid" + ], + "description": "가상 계좌 결제의 수정 입력 정보.\n\n아직 입금되지 않은 가상계좌의 입금기한 또는 입금금액을 수정할 수 있다.\n\n다만, 세틀뱅크 혹은 `fake-iamport-server` 만 가능.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "vbank_code": { + "description": "가상 계좌 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_name": { + "description": "가상 게좌 이름", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_num": { + "description": "가상 계좌 번호", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_holder": { + "description": "가상 계좌 예금주.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_date": { + "description": "가상 계좌 입금 만료 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vbank_issued_at": { + "description": "가상 계좌 개설 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "pay_method": { + "type": "string", + "enum": [ + "vbank" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "vbank_code", + "vbank_name", + "vbank_num", + "vbank_holder", + "vbank_date", + "vbank_issued_at", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "가상 계좌 편집하기." + }, + { + "method": "get", + "path": "/subscribe/customers/{customer_uid}", + "name": "subscribe_customers_getByCustomer_uid", + "parameters": [ + { + "type": "object", + "properties": { + "customer_uid": { + "type": "string", + "description": "고객 (간편 결제 카드) 식별자 키" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_code": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_type": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "inserted": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "updated": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "pg_provider", + "pg_id", + "card_name", + "card_code", + "card_number", + "card_type", + "customer_name", + "customer_tel", + "customer_email", + "customer_addr", + "customer_postcode", + "inserted", + "updated", + "customer_uid" + ], + "description": "간편 결제 카드 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "간편 결제 카드 정보 조회하기.\n\n`subscribe.customers.at` 은 고객이 {@link store } 나 혹은 아임포트가 제공하는\n간편 결제 카드 등록 창을 이용하여 저장한 간편 결제 카드 정보를 조회하는 API\n함수이다." + }, + { + "method": "post", + "path": "/subscribe/customers/{customer_uid}", + "name": "subscribe_customers_postByCustomer_uid", + "parameters": [ + { + "type": "object", + "properties": { + "customer_uid": { + "type": "string", + "description": "고객 (간편 결제 카드) 식별자 키" + }, + "body": { + "type": "object", + "properties": { + "card_number": { + "description": "카드 번호.\n\n형식: XXXX-XXXX-XXXX-XXXX", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}" + }, + "expiry": { + "description": "카드 유효기간.\n\n형식: YYYY-MM", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})-(0[1-9]|1[012])$" + }, + "birth": { + "description": "생년월일 YYMMDD 또는 사업자등록번호 10자리.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$" + }, + "pwd_2digit": { + "description": "카드 비밀번호 앞 두 자리.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "pattern": "\\d{2}" + }, + "cvc": { + "description": "카드 인증번호 (카드 뒷면 3 자리).", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "pattern": "\\d{2}" + }, + "customer_name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_tel": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_email": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "customr_addr": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_postcode": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "card_number", + "expiry", + "birth", + "customer_uid" + ], + "description": "간편 결제 카드 입력 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_code": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_type": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "inserted": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "updated": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "pg_provider", + "pg_id", + "card_name", + "card_code", + "card_number", + "card_type", + "customer_name", + "customer_tel", + "customer_email", + "customer_addr", + "customer_postcode", + "inserted", + "updated", + "customer_uid" + ], + "description": "간편 결제 카드 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "간편 결제 카드 등록하기.\n\n`subscribe.customers.stoer` 는 고객이 자신의 카드를 서버에 등록해두고, 매번 결제가\n필요할 때마다 카드 정보를 반복 입력하는 일 없이, 간편하게 결제를 진행하고자 할 때\n사용하는 API 함수이다.\n\n참고로 `subscribe.customers.store` 는 클라이언트 어플리케이션이 아임포트가 제공하는\n간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는\n일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는 상황을 시뮬레이션하기 위하여,\n테스트 자동화 프로그램 수준에서 사용될 수는 있다." + }, + { + "method": "delete", + "path": "/subscribe/customers/{customer_uid}", + "name": "subscribe_customers_eraseByCustomer_uid", + "parameters": [ + { + "type": "object", + "properties": { + "customer_uid": { + "type": "string", + "description": "고객 (간편 결제 카드) 식별자 키" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_code": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_type": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "inserted": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "updated": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "pg_provider", + "pg_id", + "card_name", + "card_code", + "card_number", + "card_type", + "customer_name", + "customer_tel", + "customer_email", + "customer_addr", + "customer_postcode", + "inserted", + "updated", + "customer_uid" + ], + "description": "간편 결제 카드 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "간편 결제 카드 삭제하기.\n\n간편 결제를 위하여 등록한 카드를 제거한다." + }, + { + "method": "post", + "path": "/subscribe/payments/onetime", + "name": "subscribe_payments_onetime_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.\n\n이를 생략시 단순 결제로만 그치며, 카드 정보가 간편 결제용으로 등록되지 아니함.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "card_number": { + "description": "카드 번호.\n\n형식: XXXX-XXXX-XXXX-XXXX", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}" + }, + "expiry": { + "description": "카드 유효기간.\n\n형식: YYYY-MM", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})-(0[1-9]|1[012])$" + }, + "birth": { + "description": "생년월일 YYMMDD 또는 사업자등록번호 10자리.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$" + }, + "pwd_2digit": { + "description": "카드 비밀번호 앞 두 자리.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "pattern": "\\d{2}" + }, + "cvc": { + "description": "카드 인증번호 (카드 뒷면 3 자리).", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "pattern": "\\d{2}" + }, + "customer_name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_tel": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_email": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "customr_addr": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_postcode": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트가 아닌 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "name": { + "description": "주문 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ], + "description": "통화 정보.", + "x-typia-required": false, + "x-typia-optional": true + }, + "tax_free": { + "description": "면세 공급가액.\n\n기본값은 0 로써, 알아서 amount 의 1/11 로써 부가세 처리됨.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "card_quota": { + "description": "할부 개월 수.\n\n일시불은 0.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "buyer_name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_email": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "buyer_tel": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_addr": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_postcode": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "interest_free_by_merchant": { + "type": "boolean", + "description": "카드할부처리할 때, 할부이자가 발생하는 경우 (카드사 무이자 프로모션 제외).\n\n부과되는 할부이자를 고객대신 가맹점이 지불하고자 PG사와 계약된 경우(현재, 나이스페이먼츠만 지원됨)", + "x-typia-required": false, + "x-typia-optional": true + }, + "use_card_point": { + "type": "boolean", + "description": "승인요청시 카드사 포인트 차감하며 결제승인처리할지 flag.\n\nPG사 영업담당자와 계약 당시 사전 협의 필요(현재, 나이스페이먼츠만 지원됨)", + "x-typia-required": false, + "x-typia-optional": true + }, + "custom_data": { + "description": "임의 정보를 기재할 수 있다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "notice_url": { + "description": "결제 성공시 통지될 Notification, 웹훅 URL.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "url" + } + }, + "required": [ + "card_number", + "expiry", + "birth", + "merchant_uid", + "amount", + "name" + ], + "description": "결제 신청 입력 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "card_code": { + "description": "카드 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "description": "카드 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}" + }, + "card_quota": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "integer" + }, + "apply_num": { + "description": "카드사 승인번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pay_method": { + "type": "string", + "enum": [ + "card", + "samsung" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "card_code", + "card_name", + "card_number", + "card_quota", + "apply_num", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "카드로 결제하기, 더불어 간편 결제용으로 등록 가능.\n\n`subscribe.payments.onetime` 은 카드를 매개로 한 결제를 하고자 할 때 호출하는 API\n함수이다. 더하여 입력 값에 {@link IIamportSubscription.IOnetime.customer_uid } 를\n기입하는 경우, 결제에 사용한 카드를 그대로 간편 결제용 카드\n{@link IIamportSubscription } 로 등록해버린다.\n\n다만, 정히 간편 카드 등록과 결제를 동시에 하고 싶다면,\n`subscribe.payments.onetime` 에 {@link IIamportSubscription.IOnetime.customer_uid }\n를 더하기보다, {@link subscribe.customers.store } 와 {@link subscribe.payments.again }\n을 각각 호출하는 것을 권장한다. 그것이 예외적인 상황에 보다 안전하게 대처할 수 있기\n때문이다.\n\n더하여 `subscribe.payments.onetime` 은 클라이언트 어플리케이션이 아임포트가 제공하는\n결제 창을 그대로 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는 일은\n없을 것이다. 다만, 고객이 카드를 통하여 결제하는 상황을 시뮬레이션하기 위하여, 테스트\n자동화 프로그램 수준에서 사용될 수는 있다." + }, + { + "method": "post", + "path": "/subscribe/payments/again", + "name": "subscribe_payments_again_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트가 아닌 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "name": { + "description": "주문 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ], + "description": "통화 정보.", + "x-typia-required": false, + "x-typia-optional": true + }, + "tax_free": { + "description": "면세 공급가액.\n\n기본값은 0 로써, 알아서 amount 의 1/11 로써 부가세 처리됨.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "card_quota": { + "description": "할부 개월 수.\n\n일시불은 0.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "buyer_name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_email": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "buyer_tel": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_addr": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_postcode": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "interest_free_by_merchant": { + "type": "boolean", + "description": "카드할부처리할 때, 할부이자가 발생하는 경우 (카드사 무이자 프로모션 제외).\n\n부과되는 할부이자를 고객대신 가맹점이 지불하고자 PG사와 계약된 경우(현재, 나이스페이먼츠만 지원됨)", + "x-typia-required": false, + "x-typia-optional": true + }, + "use_card_point": { + "type": "boolean", + "description": "승인요청시 카드사 포인트 차감하며 결제승인처리할지 flag.\n\nPG사 영업담당자와 계약 당시 사전 협의 필요(현재, 나이스페이먼츠만 지원됨)", + "x-typia-required": false, + "x-typia-optional": true + }, + "custom_data": { + "description": "임의 정보를 기재할 수 있다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "notice_url": { + "description": "결제 성공시 통지될 Notification, 웹훅 URL.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "url" + }, + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "merchant_uid", + "amount", + "name", + "customer_uid" + ], + "description": "간편 결제 카드로 결제 신청 입력 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "card_code": { + "description": "카드 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "description": "카드 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}" + }, + "card_quota": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "integer" + }, + "apply_num": { + "description": "카드사 승인번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pay_method": { + "type": "string", + "enum": [ + "card", + "samsung" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "card_code", + "card_name", + "card_number", + "card_quota", + "apply_num", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "간편 결제에 등록된 카드로 결제하기.\n\n`subscribe.payments.again` 은 고객이 간편 결제에 등록한 카드로 결제를 진행하고자 할 때\n호출하는 API 함수이다. 이는 간편하고 불편하고를 떠나, 본질적으로 카드 결제의 일환이기에,\n리턴값은 일반적인 카드 결제 때와 동일한 {@link IIamportCardPayment } 이다.\n\n그리고 `subscribe.payments.again` 은 결제 수단 중 유일하게, 클라이언트 어플리케이션이\n아임포트가 제공하는 결체 창을 사용할 수 없어, 오직 귀하의 백엔드 서버가 아임포트의 API\n함수를 직접 호출해야하는 경우에 해당한다. 따라서 간편 결제에 관하여 아임포트 서버와\n연동하는 백엔드 서버 및 프론트 어플리케이션을 개발할 때, 반드시 이 상황에 대한 별도의\n설계 및 개발이 필요하니, 이 점을 염두에 두기 바란다." + } + ], + "errors": [], + "options": { + "keyword": true, + "separate": null + } +} \ No newline at end of file diff --git a/examples/keyword/petstore.json b/examples/keyword/petstore.json new file mode 100644 index 0000000..48805a7 --- /dev/null +++ b/examples/keyword/petstore.json @@ -0,0 +1,1287 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "post", + "path": "/pet", + "name": "pet_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "required": [ + "name", + "photoUrls" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { + "type": "string", + "example": "Dogs" + } + }, + "xml": { + "name": "category" + } + }, + "photoUrls": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "string", + "xml": { + "name": "photoUrl" + } + } + }, + "tags": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "tag" + } + } + }, + "status": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ], + "description": "pet status in the store" + } + }, + "xml": { + "name": "pet" + } + } + } + } + ], + "output": { + "required": [ + "name", + "photoUrls" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { + "type": "string", + "example": "Dogs" + } + }, + "xml": { + "name": "category" + } + }, + "photoUrls": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "string", + "xml": { + "name": "photoUrl" + } + } + }, + "tags": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "tag" + } + } + }, + "status": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ], + "description": "pet status in the store" + } + }, + "xml": { + "name": "pet" + } + }, + "description": "Add a new pet to the store" + }, + { + "method": "put", + "path": "/pet", + "name": "pet_put", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "required": [ + "name", + "photoUrls" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { + "type": "string", + "example": "Dogs" + } + }, + "xml": { + "name": "category" + } + }, + "photoUrls": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "string", + "xml": { + "name": "photoUrl" + } + } + }, + "tags": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "tag" + } + } + }, + "status": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ], + "description": "pet status in the store" + } + }, + "xml": { + "name": "pet" + } + } + } + } + ], + "output": { + "required": [ + "name", + "photoUrls" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { + "type": "string", + "example": "Dogs" + } + }, + "xml": { + "name": "category" + } + }, + "photoUrls": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "string", + "xml": { + "name": "photoUrl" + } + } + }, + "tags": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "tag" + } + } + }, + "status": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ], + "description": "pet status in the store" + } + }, + "xml": { + "name": "pet" + } + }, + "description": "Update an existing pet by Id" + }, + { + "method": "get", + "path": "/pet/findByStatus", + "name": "pet_findByStatus_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": {}, + "required": [] + } + } + } + ], + "output": { + "type": "array", + "items": { + "required": [ + "name", + "photoUrls" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { + "type": "string", + "example": "Dogs" + } + }, + "xml": { + "name": "category" + } + }, + "photoUrls": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "string", + "xml": { + "name": "photoUrl" + } + } + }, + "tags": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "tag" + } + } + }, + "status": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ], + "description": "pet status in the store" + } + }, + "xml": { + "name": "pet" + } + } + }, + "description": "Finds Pets by status.\n\nMultiple status values can be provided with comma separated strings" + }, + { + "method": "get", + "path": "/pet/findByTags", + "name": "pet_findByTags_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Tags to filter by" + } + }, + "required": [] + } + } + } + ], + "output": { + "type": "array", + "items": { + "required": [ + "name", + "photoUrls" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { + "type": "string", + "example": "Dogs" + } + }, + "xml": { + "name": "category" + } + }, + "photoUrls": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "string", + "xml": { + "name": "photoUrl" + } + } + }, + "tags": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "tag" + } + } + }, + "status": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ], + "description": "pet status in the store" + } + }, + "xml": { + "name": "pet" + } + } + }, + "description": "Finds Pets by tags.\n\nMultiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing." + }, + { + "method": "get", + "path": "/pet/{petId}", + "name": "pet_getByPetid", + "parameters": [ + { + "type": "object", + "properties": { + "petId": { + "type": "integer", + "format": "int64", + "description": "ID of pet to return" + } + } + } + ], + "output": { + "required": [ + "name", + "photoUrls" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { + "type": "string", + "example": "Dogs" + } + }, + "xml": { + "name": "category" + } + }, + "photoUrls": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "string", + "xml": { + "name": "photoUrl" + } + } + }, + "tags": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "tag" + } + } + }, + "status": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ], + "description": "pet status in the store" + } + }, + "xml": { + "name": "pet" + } + }, + "description": "Find pet by ID.\n\nReturns a single pet" + }, + { + "method": "post", + "path": "/pet/{petId}", + "name": "pet_postByPetid", + "parameters": [ + { + "type": "object", + "properties": { + "petId": { + "type": "integer", + "format": "int64", + "description": "ID of pet that needs to be updated" + }, + "query": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of pet that needs to be updated" + }, + "status": { + "type": "string", + "description": "Status of pet that needs to be updated" + } + }, + "required": [] + } + } + } + ], + "description": "" + }, + { + "method": "delete", + "path": "/pet/{petId}", + "name": "pet_eraseByPetid", + "parameters": [ + { + "type": "object", + "properties": { + "petId": { + "type": "integer", + "format": "int64", + "description": "Pet id to delete" + } + } + } + ], + "description": "" + }, + { + "method": "get", + "path": "/store/inventory", + "name": "store_inventory_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int32" + } + }, + "description": "Returns pet inventories by status.\n\nReturns a map of status codes to quantities" + }, + { + "method": "post", + "path": "/store/order", + "name": "store_order_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "petId": { + "type": "integer", + "format": "int64", + "example": 198772 + }, + "quantity": { + "type": "integer", + "format": "int32", + "example": 7 + }, + "shipDate": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string", + "enum": [ + "placed", + "approved", + "delivered" + ], + "description": "Order Status" + }, + "complete": { + "type": "boolean" + } + }, + "xml": { + "name": "order" + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "petId": { + "type": "integer", + "format": "int64", + "example": 198772 + }, + "quantity": { + "type": "integer", + "format": "int32", + "example": 7 + }, + "shipDate": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string", + "enum": [ + "placed", + "approved", + "delivered" + ], + "description": "Order Status" + }, + "complete": { + "type": "boolean" + } + }, + "xml": { + "name": "order" + } + }, + "description": "Place an order for a pet.\n\nPlace a new order in the store" + }, + { + "method": "get", + "path": "/store/order/{orderId}", + "name": "store_order_getByOrderid", + "parameters": [ + { + "type": "object", + "properties": { + "orderId": { + "type": "integer", + "format": "int64", + "description": "ID of order that needs to be fetched" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "petId": { + "type": "integer", + "format": "int64", + "example": 198772 + }, + "quantity": { + "type": "integer", + "format": "int32", + "example": 7 + }, + "shipDate": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string", + "enum": [ + "placed", + "approved", + "delivered" + ], + "description": "Order Status" + }, + "complete": { + "type": "boolean" + } + }, + "xml": { + "name": "order" + } + }, + "description": "Find purchase order by ID.\n\nFor valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions." + }, + { + "method": "delete", + "path": "/store/order/{orderId}", + "name": "store_order_eraseByOrderid", + "parameters": [ + { + "type": "object", + "properties": { + "orderId": { + "type": "integer", + "format": "int64", + "description": "ID of the order that needs to be deleted" + } + } + } + ], + "description": "Delete purchase order by ID.\n\nFor valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors" + }, + { + "method": "post", + "path": "/user", + "name": "user_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "username": { + "type": "string", + "example": "theUser" + }, + "firstName": { + "type": "string", + "example": "John" + }, + "lastName": { + "type": "string", + "example": "James" + }, + "email": { + "type": "string", + "example": "john@email.com" + }, + "password": { + "type": "string", + "example": "12345" + }, + "phone": { + "type": "string", + "example": "12345" + }, + "userStatus": { + "type": "integer", + "description": "User Status", + "format": "int32", + "example": 1 + } + }, + "xml": { + "name": "user" + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "username": { + "type": "string", + "example": "theUser" + }, + "firstName": { + "type": "string", + "example": "John" + }, + "lastName": { + "type": "string", + "example": "James" + }, + "email": { + "type": "string", + "example": "john@email.com" + }, + "password": { + "type": "string", + "example": "12345" + }, + "phone": { + "type": "string", + "example": "12345" + }, + "userStatus": { + "type": "integer", + "description": "User Status", + "format": "int32", + "example": 1 + } + }, + "xml": { + "name": "user" + } + }, + "description": "Create user.\n\nThis can only be done by the logged in user." + }, + { + "method": "post", + "path": "/user/createWithList", + "name": "user_createWithList_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "username": { + "type": "string", + "example": "theUser" + }, + "firstName": { + "type": "string", + "example": "John" + }, + "lastName": { + "type": "string", + "example": "James" + }, + "email": { + "type": "string", + "example": "john@email.com" + }, + "password": { + "type": "string", + "example": "12345" + }, + "phone": { + "type": "string", + "example": "12345" + }, + "userStatus": { + "type": "integer", + "description": "User Status", + "format": "int32", + "example": 1 + } + }, + "xml": { + "name": "user" + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "username": { + "type": "string", + "example": "theUser" + }, + "firstName": { + "type": "string", + "example": "John" + }, + "lastName": { + "type": "string", + "example": "James" + }, + "email": { + "type": "string", + "example": "john@email.com" + }, + "password": { + "type": "string", + "example": "12345" + }, + "phone": { + "type": "string", + "example": "12345" + }, + "userStatus": { + "type": "integer", + "description": "User Status", + "format": "int32", + "example": 1 + } + }, + "xml": { + "name": "user" + } + }, + "description": "Creates list of users with given input array" + }, + { + "method": "get", + "path": "/user/login", + "name": "user_login_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "The user name for login" + }, + "password": { + "type": "string", + "description": "The password for login in clear text" + } + }, + "required": [] + } + } + } + ], + "output": { + "type": "string" + }, + "description": "" + }, + { + "method": "get", + "path": "/user/logout", + "name": "user_logout_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "description": "" + }, + { + "method": "get", + "path": "/user/{username}", + "name": "user_getByUsername", + "parameters": [ + { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "The name that needs to be fetched. Use user1 for testing. " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "username": { + "type": "string", + "example": "theUser" + }, + "firstName": { + "type": "string", + "example": "John" + }, + "lastName": { + "type": "string", + "example": "James" + }, + "email": { + "type": "string", + "example": "john@email.com" + }, + "password": { + "type": "string", + "example": "12345" + }, + "phone": { + "type": "string", + "example": "12345" + }, + "userStatus": { + "type": "integer", + "description": "User Status", + "format": "int32", + "example": 1 + } + }, + "xml": { + "name": "user" + } + }, + "description": "" + }, + { + "method": "put", + "path": "/user/{username}", + "name": "user_putByUsername", + "parameters": [ + { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "name that need to be deleted" + }, + "body": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "username": { + "type": "string", + "example": "theUser" + }, + "firstName": { + "type": "string", + "example": "John" + }, + "lastName": { + "type": "string", + "example": "James" + }, + "email": { + "type": "string", + "example": "john@email.com" + }, + "password": { + "type": "string", + "example": "12345" + }, + "phone": { + "type": "string", + "example": "12345" + }, + "userStatus": { + "type": "integer", + "description": "User Status", + "format": "int32", + "example": 1 + } + }, + "xml": { + "name": "user" + } + } + } + } + ], + "description": "Update user.\n\nThis can only be done by the logged in user." + }, + { + "method": "delete", + "path": "/user/{username}", + "name": "user_eraseByUsername", + "parameters": [ + { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "The name that needs to be deleted" + } + } + } + ], + "description": "Delete user.\n\nThis can only be done by the logged in user." + } + ], + "errors": [ + { + "method": "post", + "path": "/pet/{petId}/uploadImage", + "messages": [ + "supports only \"application/json\", \"application/x-www-form-urlencoded\", \"multipart/form-data\" and \"text/plain\" content type in the request body." + ] + } + ], + "options": { + "keyword": true, + "separate": null + } +} \ No newline at end of file diff --git a/examples/keyword/shopping.json b/examples/keyword/shopping.json new file mode 100644 index 0000000..9fe9564 --- /dev/null +++ b/examples/keyword/shopping.json @@ -0,0 +1,50964 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "get", + "path": "/monitors/health", + "name": "monitors_health_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "description": "Health check API." + }, + { + "method": "get", + "path": "/monitors/performance", + "name": "monitors_performance_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "properties": { + "cpu": { + "type": "object", + "properties": { + "user": { + "type": "number" + }, + "system": { + "type": "number" + } + }, + "required": [ + "user", + "system" + ] + }, + "memory": { + "type": "object", + "properties": { + "rss": { + "type": "number" + }, + "heapTotal": { + "type": "number" + }, + "heapUsed": { + "type": "number" + }, + "external": { + "type": "number" + }, + "arrayBuffers": { + "type": "number" + } + }, + "required": [ + "rss", + "heapTotal", + "heapUsed", + "external", + "arrayBuffers" + ] + }, + "resource": { + "type": "object", + "properties": { + "fsRead": { + "type": "number" + }, + "fsWrite": { + "type": "number" + }, + "involuntaryContextSwitches": { + "type": "number" + }, + "ipcReceived": { + "type": "number" + }, + "ipcSent": { + "type": "number" + }, + "majorPageFault": { + "type": "number" + }, + "maxRSS": { + "type": "number" + }, + "minorPageFault": { + "type": "number" + }, + "sharedMemorySize": { + "type": "number" + }, + "signalsCount": { + "type": "number" + }, + "swappedOut": { + "type": "number" + }, + "systemCPUTime": { + "type": "number" + }, + "unsharedDataSize": { + "type": "number" + }, + "unsharedStackSize": { + "type": "number" + }, + "userCPUTime": { + "type": "number" + }, + "voluntaryContextSwitches": { + "type": "number" + } + }, + "required": [ + "fsRead", + "fsWrite", + "involuntaryContextSwitches", + "ipcReceived", + "ipcSent", + "majorPageFault", + "maxRSS", + "minorPageFault", + "sharedMemorySize", + "signalsCount", + "swappedOut", + "systemCPUTime", + "unsharedDataSize", + "unsharedStackSize", + "userCPUTime", + "voluntaryContextSwitches" + ] + } + }, + "required": [ + "cpu", + "memory", + "resource" + ] + }, + "description": "Get performance information.\n\nGet perofmration information composed with CPU, memory and resource usage." + }, + { + "method": "get", + "path": "/monitors/system", + "name": "monitors_system_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "properties": { + "uid": { + "type": "number", + "title": "Random Unique ID", + "description": "Random Unique ID." + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "`process.argv`" + }, + "commit": { + "type": "object", + "properties": { + "shortHash": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "hash": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "sanitizedSubject": { + "type": "string" + }, + "body": { + "type": "string" + }, + "author": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "description": "Git user account info." + }, + "committer": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "description": "Git user account info." + }, + "authored_at": { + "type": "string" + }, + "commited_at": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shortHash", + "branch", + "hash", + "subject", + "sanitizedSubject", + "body", + "author", + "committer", + "authored_at", + "commited_at", + "tags" + ], + "description": "Git commit info." + }, + "package": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "description": { + "type": "string" + }, + "main": { + "type": "string" + }, + "typings": { + "type": "string" + }, + "scripts": { + "type": "object", + "properties": {}, + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } + }, + "repository": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "git" + ] + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ] + }, + "author": { + "type": "string" + }, + "license": { + "type": "string" + }, + "bugs": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + }, + "required": [ + "url" + ] + }, + "homepage": { + "type": "string" + }, + "devDependencies": { + "type": "object", + "properties": {}, + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } + }, + "dependencies": { + "type": "object", + "properties": {}, + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } + }, + "publishConfig": { + "type": "object", + "properties": { + "registry": { + "type": "string" + } + }, + "required": [ + "registry" + ] + }, + "files": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "version", + "description", + "scripts", + "repository", + "author", + "license", + "bugs", + "homepage", + "dependencies" + ], + "description": "NPM package info." + }, + "created_at": { + "type": "string", + "title": "Creation time of this server", + "description": "Creation time of this server." + } + }, + "required": [ + "uid", + "arguments", + "commit", + "package", + "created_at" + ], + "description": "System Information." + }, + "description": "Get system information.\n\nGet system information with commit and package information.\n\nAs such information is a type of sensitive, response be encrypted." + }, + { + "method": "get", + "path": "/shoppings/admins/authenticate", + "name": "shoppings_admins_authenticate_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "description": "Get administrator information.\n\nGet {@link IShoppingAdministrator.IInvert administrator} information of\ncurrent {@link IShoppingCustomer customer}.\n\nIf current {@link IShoppingMember member} is not an administrator,\nit throws 403 forbidden exception." + }, + { + "method": "post", + "path": "/shoppings/admins/authenticate", + "name": "shoppings_admins_authenticate_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": {}, + "description": "Joining request info." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "description": "Join as an administrator.\n\nJoin as an administrator with {@link IShoppingAdministrator.IJoin joining info}.\n\nThis method is allowed only when the {@link IShoppingCustomer customer} already\nhas joined the {@link IShoppingMember membership}. IF not, he (she) must\naccomplish it before. If not, 403 forbidden exception would be thrown." + }, + { + "method": "put", + "path": "/shoppings/admins/authenticate/login", + "name": "shoppings_admins_authenticate_login_put", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "title": "Email address of member", + "description": "Email address of member.\n\nIf the member has multiple email addresses, just use one of them." + }, + "password": { + "type": "string", + "title": "Password of the member account", + "description": "Password of the member account." + } + }, + "required": [ + "email", + "password" + ], + "description": "Login request info." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "description": "Login as an administrator.\n\nLogin as an administrator with {@link IShoppingAdministrator.ILogin login info}.\n\nThis method has exactly same effect with\n{@link ShoppingApi.functional.customers.authenticate.login } function, but\nreturned type is a llttle different. The similar function returns\n{@link IShoppingCustomer } type that starting from the customer information, so\nthat you have to access to the administrator info through\n`customer.member.administrator`. In contrast with that, this method returns\n{@link IShoppingAdministrator.IInvert } type that starting from the administrator\ninfo, so that can access to the customer info through `administrator.customer`.\n\nOf course, to use this function, you had to {@link join } as an administrator\nbefore. If not, 403 forbidden exception would be thrown," + }, + { + "method": "delete", + "path": "/shoppings/admins/coupons/{id}", + "name": "shoppings_admins_coupons_eraseById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Target coupon's " + } + } + } + ], + "description": "Erase a coupon.\n\nErase a {@link IShoppingCoupon coupon} with given ID.\n\nFor reference, if there're some {@link IShoppingCouponTicket tickets}\nwhich are already issued from the target coupon, they would not be affected.\nThose tickets are still valid until their expration time." + }, + { + "method": "post", + "path": "/shoppings/admins/deposits", + "name": "shoppings_admins_deposits_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + -1, + 1 + ] + } + }, + "required": [ + "code", + "source", + "direction" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "description": "Create a new deposit metadata.\n\nCreate a new {@link IShoppingDeposit deposit} metadata.\n\nThis action means that adding a new origin reason of deposit's income/outcome.\nOf course, creating a new deposit record does not mean that automatically\nincrease or decrease the {@link IShoppingCustomer customer}'s balance\nfollowing the record's reason why. The logic must be developed manually\nin the backend side." + }, + { + "method": "patch", + "path": "/shoppings/admins/deposits", + "name": "shoppings_admins_deposits_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + -1, + 1 + ] + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-deposit.source", + "-deposit.code", + "-deposit.direction", + "+deposit.source", + "+deposit.code", + "+deposit.direction" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "Get deposit metadata list.\n\nList up every {@link IShoppingDeposit deposit} metadata informations\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDeposit.IRequest.search search condition} in the request body.\nAlso, it is possible to customize sequence order of records by configuring\n{@link IShoppingDeposit.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/admins/deposits/{id}", + "name": "shoppings_admins_deposits_getById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target deposit's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "description": "Get a deposit metadata.\n\nGet a {@link IShoppingDeposit deposit} metadata information with its ID." + }, + { + "method": "delete", + "path": "/shoppings/admins/deposits/{id}", + "name": "shoppings_admins_deposits_eraseById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target deposit's " + } + } + } + ], + "description": "Erase a deposit metadata.\n\nErase a {@link IShoppingDeposit deposit} metadata, so that no more\n{@link IShoppingCustomer customer}'s balance does not be increased or\ndecreased by the deposit's reason why." + }, + { + "method": "get", + "path": "/shoppings/admins/deposits/{code}/get", + "name": "shoppings_admins_deposits_get_getByCode", + "parameters": [ + { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "description": "Get a deposit metadata by its code.\n\nGet a {@link IShoppingDeposit deposit} metadata information with its code." + }, + { + "method": "post", + "path": "/shoppings/admins/mileages", + "name": "shoppings_admins_mileages_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + -1, + 1 + ] + }, + "value": { + "type": "number", + "nullable": true + } + }, + "required": [ + "code", + "source", + "direction", + "value" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "description": "Create a new mileage metadata.\n\nCreate a new {@link IShoppingMileage mileage} metadata.\n\nThis action means that adding a new origin reason of mileage's income/outcome.\nOf course, creating a new mileage record does not mean that automatically\nincrease or decrease the {@link IShoppingCustomer customer}'s balance\nfollowing the record's reason why. The logic must be developed manually\nin the backend side." + }, + { + "method": "patch", + "path": "/shoppings/admins/mileages", + "name": "shoppings_admins_mileages_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + -1, + 1 + ] + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-mileage.source", + "-mileage.code", + "-mileage.direction", + "+mileage.source", + "+mileage.code", + "+mileage.direction" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "Get mileage metadata list.\n\nList up every {@link IShoppingMileage mileage} metadata informations\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileage.IRequest.search search condition} in the request body.\nAlso, it is possible to customize sequence order of records by configuring\n{@link IShoppingMileage.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/admins/mileages/{id}", + "name": "shoppings_admins_mileages_getById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target mileage's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "description": "Get a mileage metadata.\n\nGet a {@link IShoppingMileage mileage} metadata information with its ID." + }, + { + "method": "delete", + "path": "/shoppings/admins/mileages/{id}", + "name": "shoppings_admins_mileages_eraseById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target mileage's " + } + } + } + ], + "description": "Erase a mileage metadata.\n\nErase a {@link IShoppingMileage mileage} metadata, so that no more\n{@link IShoppingCustomer customer}'s balance does not be increased or\ndecreased by the mileage's reason why." + }, + { + "method": "get", + "path": "/shoppings/admins/mileages/{code}/get", + "name": "shoppings_admins_mileages_get_getByCode", + "parameters": [ + { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "description": "Get a mileage metadata by its code.\n\nGet a {@link IShoppingMileage mileage} metadata information with its code." + }, + { + "method": "post", + "path": "/shoppings/admins/mileages/donations", + "name": "shoppings_admins_mileages_donations_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "citizen_id", + "value", + "reason" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "administrator": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "administrator", + "citizen", + "value", + "reason", + "created_at" + ] + }, + "description": "Donate a mileage to a citizen.\n\nDonate a mileage to a specific {@link IShoppingCitizen citizen} from\ncurrent {@link IShoppingAdministrator administrator}, with detailed\nreason why.\n\nNote that, as donating mileage affects to the citizen's balance and\ncurrent shopping mall's operating profit, administrator must archive\nthe detailed reason why the mileage is donated." + }, + { + "method": "patch", + "path": "/shoppings/admins/mileages/donations", + "name": "shoppings_admins_mileages_donations_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$" + }, + "name": { + "type": "string" + } + } + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-donation.created_at", + "-donation.value", + "-donation.reason", + "+donation.created_at", + "+donation.value", + "+donation.reason" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "administrator": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "administrator", + "citizen", + "value", + "reason", + "created_at" + ] + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every mileage donation histories.\n\nList up every {@link IShoppingMileageDonation mileage donation histories}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileageDonation.IRequest.search search condition} in\nthe request body. Also, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingMileageDonation.IRequest.sort sort}." + }, + { + "method": "get", + "path": "/shoppings/admins/mileages/donations/{id}", + "name": "shoppings_admins_mileages_donations_getById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target history's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "administrator": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "administrator", + "citizen", + "value", + "reason", + "created_at" + ] + }, + "description": "Get a mileage donation history.\n\nGet a {@link IShoppingMileageDonation mileage donation history} with its ID." + }, + { + "method": "post", + "path": "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments", + "name": "shoppings_admins_sales_questions_comments_postBySaleidAndInquiryid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Target inquiry's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + }, + { + "method": "patch", + "path": "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments", + "name": "shoppings_admins_sales_questions_comments_patchBySaleidAndInquiryid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the comments with pagination and searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + { + "method": "get", + "path": "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments/{id}", + "name": "shoppings_admins_sales_questions_comments_getBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + { + "method": "put", + "path": "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments/{id}", + "name": "shoppings_admins_sales_questions_comments_putBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot content of the comment." + }, + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "patch", + "path": "/shoppings/admins/sales/{saleId}/questions", + "name": "shoppings_admins_sales_questions_patchBySaleid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the question." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + }, + { + "method": "patch", + "path": "/shoppings/admins/sales/{saleId}/questions/abridges", + "name": "shoppings_admins_sales_questions_abridges_patchBySaleid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the question." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at } function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/admins/sales/{saleId}/questions/{id}", + "name": "shoppings_admins_sales_questions_getBySaleidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target question's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "type": { + "type": "string", + "enum": [ + "question" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "secret", + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Question about sale snapshot.\n\n`IShoppingSaleQuestion` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} wants to ask something\nabout a {@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at\nthe time) registered by the {@link IShoppingSeller seller}.\n\nAnd, like most shopping malls, `IShoppingSaleQuestion` also provides\na {@link secret } attribute, allowing you to create a \"secret message\" that can\nonly be viewed by the seller and the customer who wrote the question." + }, + "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret }\nvalue is `false`." + }, + { + "method": "post", + "path": "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments", + "name": "shoppings_admins_sales_reviews_comments_postBySaleidAndInquiryid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Target inquiry's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + }, + { + "method": "patch", + "path": "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments", + "name": "shoppings_admins_sales_reviews_comments_patchBySaleidAndInquiryid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the comments with pagination and searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + { + "method": "get", + "path": "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments/{id}", + "name": "shoppings_admins_sales_reviews_comments_getBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + { + "method": "put", + "path": "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments/{id}", + "name": "shoppings_admins_sales_reviews_comments_putBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot content of the comment." + }, + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "patch", + "path": "/shoppings/admins/sales/{saleId}/reviews", + "name": "shoppings_admins_sales_reviews_patchBySaleid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at", + "-score", + "+score" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the review." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + }, + { + "method": "patch", + "path": "/shoppings/admins/sales/{saleId}/reviews/abridges", + "name": "shoppings_admins_sales_reviews_abridges_patchBySaleid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at", + "-score", + "+score" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the review." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at } function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/admins/sales/{saleId}/reviews/{id}", + "name": "shoppings_admins_sales_reviews_getBySaleidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target review's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "review" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot content of the review article." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Reviews for sale snapshots.\n\n`IShoppingSaleReview` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} purchases a\n{@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at the time)\nregistered by the {@link IShoppingSeller seller} as a product and leaves a\nreview and rating for it.\n\nFor reference, `IShoppingSaleReview` and\n{@link IShoppingOrderGod shopping_order_goods} have a logarithmic relationship\nof N: 1, but this does not mean that customers can continue to write reviews\nfor the same product indefinitely. Wouldn't there be restrictions, such as\nif you write a review once, you can write an additional review a month later?" + }, + "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales." + }, + { + "method": "put", + "path": "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}", + "name": "shoppings_admins_systematic_channels_categories_putByChannelcodeAndId", + "parameters": [ + { + "type": "object", + "properties": { + "channelCode": { + "type": "string", + "description": "Belonged channel's " + }, + "id": { + "type": "string", + "description": "Target category's " + }, + "body": { + "type": "object", + "properties": { + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent category's ID", + "description": "Parent category's ID." + }, + "name": { + "type": "string", + "title": "Representative name of the category", + "description": "Representative name of the category.\n\nThe name must be unique within the parent category. If no parent exists,\nthen the name must be unique within the channel between no parent\ncategories." + } + }, + "required": [ + "parent_id", + "name" + ], + "description": "Creation information of the category." + } + } + } + ], + "description": "Update a category.\n\nUpdate a {@link IShoppingChannelCategory category}'s name. If required,\nit is possible to change the parent category by its ID. Of course, detaching\nfrom the parent category so that becoming the root category is also possible." + }, + { + "method": "delete", + "path": "/shoppings/admins/systematic/channels/{channelCode}/categories/merge", + "name": "shoppings_admins_systematic_channels_categories_merge_eraseByChannelcode", + "parameters": [ + { + "type": "object", + "properties": { + "channelCode": { + "type": "string", + "description": "Belonged channel's " + }, + "body": { + "type": "object", + "properties": { + "keep": { + "type": "string", + "format": "uuid", + "title": "Target record to keep after merging", + "description": "Target record to keep after merging.\n\nAfter merge process, {@link absorbed } records would be merged into\nthis {@link keep } record." + }, + "absorbed": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "To be absorbed to {@link keep } after merging", + "description": "To be absorbed to {@link keep } after merging." + } + }, + "required": [ + "keep", + "absorbed" + ], + "description": "Record Merge DTO.\n\n`IRecordMerge` is a structure for merging records.\n\nThe `merge` means that merging multiple {@link IRecordMerge.absorbed }\nrecords into {@link IRecordMerge.keep } instead of deleting\n{@link IRecordMerge.absorbed } records.\n\nIf there're some dependent tables of the target `table` having\nunique constraint on foriegn key column, such dependent tables\nalso perform the merge process, too.\n\nOf course, if there're another dependent tables under those\ndependents, they also perform the merge process recursively as well.\nSuch recursive merge process still works for self-recursive\n(tree-structured) tables." + } + } + } + ], + "description": "Merge multiple categories into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingChannelCategory category}, because it is a systematic\nentity affecting to all other core entities like\n{@link IShoppingSale sales}. Instead of deleting, you can merge multiple\ncategories into one.\n\nIf you specify a category to absorb others, then all of other categories\nwill be merged into the specified one. Also, subsidiary entities of\ncategories also be merged and their references also be merged cascadingly." + }, + { + "method": "post", + "path": "/shoppings/admins/systematic/channels", + "name": "shoppings_admins_systematic_channels_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "code", + "name" + ], + "description": "Creation information of the channel." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "description": "Create a new channel.\n\nCreate a new {@link IShoppingChannel channel} with given code and name.\n\nAs channel means an individual market,\n{@link IShoppingAdministrator administrator} should perform this action\nonly when a new application being registered." + }, + { + "method": "patch", + "path": "/shoppings/admins/systematic/channels", + "name": "shoppings_admins_systematic_channels_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-channel.code", + "-channel.name", + "-channel.created_at", + "+channel.code", + "+channel.name", + "+channel.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the channels with pagination and searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + }, + { + "method": "put", + "path": "/shoppings/admins/systematic/channels/{id}", + "name": "shoppings_admins_systematic_channels_putById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target channel's " + }, + "body": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "name" + ], + "description": "Updating information of the channel." + } + } + } + ], + "description": "Update a channel.\n\nUpdate a {@link IShoppingChannel channel}'s name.\n\nNote that, it is not possible to change the channel's code. If you want to\nto do it forcibly, then {@link create } new one and {@link merge } with it." + }, + { + "method": "delete", + "path": "/shoppings/admins/systematic/channels/merge", + "name": "shoppings_admins_systematic_channels_merge_erase", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "keep": { + "type": "string", + "format": "uuid", + "title": "Target record to keep after merging", + "description": "Target record to keep after merging.\n\nAfter merge process, {@link absorbed } records would be merged into\nthis {@link keep } record." + }, + "absorbed": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "To be absorbed to {@link keep } after merging", + "description": "To be absorbed to {@link keep } after merging." + } + }, + "required": [ + "keep", + "absorbed" + ], + "description": "Record Merge DTO.\n\n`IRecordMerge` is a structure for merging records.\n\nThe `merge` means that merging multiple {@link IRecordMerge.absorbed }\nrecords into {@link IRecordMerge.keep } instead of deleting\n{@link IRecordMerge.absorbed } records.\n\nIf there're some dependent tables of the target `table` having\nunique constraint on foriegn key column, such dependent tables\nalso perform the merge process, too.\n\nOf course, if there're another dependent tables under those\ndependents, they also perform the merge process recursively as well.\nSuch recursive merge process still works for self-recursive\n(tree-structured) tables." + } + } + } + ], + "description": "Merge multiple channels into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingChannel channel}, because it is a systematic entity\naffecting to all other core entities like customers, members and\nsales. Instead of deleting, you can merge multiple channels into one.\n\nIf you specify a channel to absorb others, then all of other channels\nwill be merged into the specified one. Also, subsidiary entities of\nchannels also be merged and their references also be merged cascadingly." + }, + { + "method": "post", + "path": "/shoppings/admins/systematic/sections", + "name": "shoppings_admins_systematic_sections_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + } + }, + "required": [ + "code", + "name" + ], + "description": "Creation information of the section." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "description": "Create a new section.\n\nCreate a new {@link IShoppingSection section} with given code and name.\n\nAs section means a spatial unit of a market that handling different type\nof products with other section, {@link IShoppingAdministrator administrator}\nshould perform this action only when a new section being required." + }, + { + "method": "patch", + "path": "/shoppings/admins/systematic/sections", + "name": "shoppings_admins_systematic_sections_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-section.code", + "-section.name", + "-section.created_at", + "+section.code", + "+section.name", + "+section.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the sections with pagination and searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/admins/systematic/sections/{id}", + "name": "shoppings_admins_systematic_sections_getById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target section's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." + }, + { + "method": "put", + "path": "/shoppings/admins/systematic/sections/{id}", + "name": "shoppings_admins_systematic_sections_putById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target section's " + }, + "body": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + } + }, + "required": [ + "name" + ], + "description": "Updating information of the section." + } + } + } + ], + "description": "Update a section.\n\nUpdate a {@link IShoppingSection section}'s name.\n\nNote that, it is not possible to change the section's code. If you want to\nto do it forcibly, then {@link create } new one and {@link merge } with it." + }, + { + "method": "delete", + "path": "/shoppings/admins/systematic/sections/merge", + "name": "shoppings_admins_systematic_sections_merge_erase", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "keep": { + "type": "string", + "format": "uuid", + "title": "Target record to keep after merging", + "description": "Target record to keep after merging.\n\nAfter merge process, {@link absorbed } records would be merged into\nthis {@link keep } record." + }, + "absorbed": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "To be absorbed to {@link keep } after merging", + "description": "To be absorbed to {@link keep } after merging." + } + }, + "required": [ + "keep", + "absorbed" + ], + "description": "Record Merge DTO.\n\n`IRecordMerge` is a structure for merging records.\n\nThe `merge` means that merging multiple {@link IRecordMerge.absorbed }\nrecords into {@link IRecordMerge.keep } instead of deleting\n{@link IRecordMerge.absorbed } records.\n\nIf there're some dependent tables of the target `table` having\nunique constraint on foriegn key column, such dependent tables\nalso perform the merge process, too.\n\nOf course, if there're another dependent tables under those\ndependents, they also perform the merge process recursively as well.\nSuch recursive merge process still works for self-recursive\n(tree-structured) tables." + } + } + } + ], + "description": "Merge multiple sections into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingSection section}, because it is a systematic entity\naffecting to all other core entities like {@link IShoppingSale sales}.\nInstead of deleting, you can merge multiple sections into one.\n\nIf you specify a section to absorb others, then all of other sections\nwill be merged into the specified one. Also, subsidiary entities of\nsections also be merged and their references also be merged cascadingly." + }, + { + "method": "get", + "path": "/shoppings/admins/systematic/sections/{code}/get", + "name": "shoppings_admins_systematic_sections_get_getByCode", + "parameters": [ + { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Target section's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code." + }, + { + "method": "patch", + "path": "/shoppings/customers/authenticate/refresh", + "name": "shoppings_customers_authenticate_refresh_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "setHeaders": { + "type": "object", + "properties": { + "Authorization": { + "type": "string" + } + }, + "required": [ + "Authorization" + ] + }, + "token": { + "type": "object", + "properties": { + "access": { + "type": "string" + }, + "refresh": { + "type": "string" + }, + "expired_at": { + "type": "string", + "format": "date-time" + }, + "refreshable_until": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "access", + "refresh", + "expired_at", + "refreshable_until" + ] + }, + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "setHeaders", + "token", + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ] + }, + "description": "Refresh the authentication token.\n\nCreate a new {@link IShoppingCustomer.IToken.access access token} of a\n{@link IShoppingCustomer customer} with the pre-issued\n{@link IShoppingCustomer.IToken.refresh refresh} token.\n\nNote that, this function is available until the\n{@link IShoppingCustomer.IToken.refreshable_until } value." + }, + { + "method": "get", + "path": "/shoppings/customers/authenticate", + "name": "shoppings_customers_authenticate_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "description": "Get current customer info.\n\nGet current {@link IShoppingCustomer customer} information from the\n{@link IShoppingCustomer.IToken.access access token}." + }, + { + "method": "post", + "path": "/shoppings/customers/authenticate", + "name": "shoppings_customers_authenticate_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "channel_code": { + "type": "string" + }, + "external_user": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "password": { + "type": "string", + "title": "Password of external user from the external system", + "description": "Password of external user from the external system.\n\nThis is a password issued to the user by an external service,\nand is by no means the actual user password. However, for\n{@link IShoppingCustomer customers} who entered the same\napplication and code as the current external system user, this is\nto determine whether to view this as a correct external system\nuser or a violation." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "citizen", + "application", + "uid", + "nickname", + "password", + "data" + ], + "nullable": true + }, + "href": { + "type": "string", + "format": "uri" + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ] + } + }, + "required": [ + "channel_code", + "external_user", + "href", + "referrer" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "setHeaders": { + "type": "object", + "properties": { + "Authorization": { + "type": "string" + } + }, + "required": [ + "Authorization" + ] + }, + "token": { + "type": "object", + "properties": { + "access": { + "type": "string" + }, + "refresh": { + "type": "string" + }, + "expired_at": { + "type": "string", + "format": "date-time" + }, + "refreshable_until": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "access", + "refresh", + "expired_at", + "refreshable_until" + ] + }, + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "setHeaders", + "token", + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ] + }, + "description": "Create a new customer record.\n\nThis shopping mall system defines everyone participating in this market as\na \"customer\". And the customer records are not archived based on individual\n{@link IShoppingCitizen people}, but based on the unit of connection.\nTherefore, even if it is the same person, a new {@link IShoppingCustomer }\nrecord is created every time a connection is made.\n\nTherefore, all Client Applications that access this service must first call\nthis function, report the customer's inflow path to the server, and create\nan {@link IShoppingCustomer.IToken.access access token}. If you skip this\nfunction call, all the other API functions would be prohibited. There is no\nexception, even if you want to {@link activate } your citizenship or\n{@link login } with your {@link IShoppingMember member account}. Before\nauthenticating yourself or logging in, be sure to call this function first.\nThis also applies when an {@link IShoppingAdministrator administrator} or\n{@link IShoppingSeller seller} logs in.\n\nAlso, the authentication token has an\n{@link IShoppingCustomer.IToken.expired_at expiration time}\nand cannot be used permanently. For reference, the authentication token is\nvalid for 3 hours, and if you want to maintain customer authentication even\nafter 3 hours, you must call the {@link refresh } function." + }, + { + "method": "post", + "path": "/shoppings/customers/authenticate/join", + "name": "shoppings_customers_authenticate_join_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "citizen": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "mobile", + "name" + ], + "description": "Citizen information.", + "title": "Citizen information", + "nullable": true + }, + "email": { + "type": "string", + "format": "email", + "title": "Email address of member", + "description": "Email address of member.\n\nIf the member has multiple email addresses, just use one of them." + }, + "password": { + "type": "string", + "title": "Password of the member account", + "description": "Password of the member account." + } + }, + "required": [ + "nickname", + "citizen", + "email", + "password" + ], + "description": "Joining request info." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "description": "Join membership.\n\n{@link IShoppingCustomer Customer} signs up for\n{@link IShoppingMember membership} of current shopping mall system.\n\nIf you've performed the {@link IShoppingCitizen citizenship}\n{@link activate activation} too, then you can skip the {@link activate }\nfunction calling everytime you log in from now on. Also, if the person had\n{@link IShoppingOrder purchased} with {@link activate } and {@link external }\nfunction calling, you can also access to the order history too. In other\nwords, activity details prior to membership registration can also be\naccessed with continuity.\n\nFor reference, as described in the {@link create } function, before calling\nthis `join` function, you must first create a customer record and token by\ncalling the {@link create } function." + }, + { + "method": "put", + "path": "/shoppings/customers/authenticate/login", + "name": "shoppings_customers_authenticate_login_put", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "title": "Email address of member", + "description": "Email address of member.\n\nIf the member has multiple email addresses, just use one of them." + }, + "password": { + "type": "string", + "title": "Password of the member account", + "description": "Password of the member account." + } + }, + "required": [ + "email", + "password" + ], + "description": "Login request info." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "description": "Membership login.\n\n{@link IShoppingCustomer Customer} logs in with his/her\n{@link IShoppingMember membership} account with the email and password.\n\nIf the {@link IShoppingMember member} has previously performed\n{@link activate citizenship activation}, the {@link IShoppingCustomer.citizen }\nvalue would be filled in accordingly. And if the member has also signed up\nas an {@link IShoppingAdministrator administrator} or\n{@link IShoppingSeller seller}, the relevant information is also entered\naccordingly.\n\nFor reference, as described in the {@link create } function, before calling\nthis `login` function, you must first create a customer record and token by\ncalling the {@link create } function." + }, + { + "method": "post", + "path": "/shoppings/customers/authenticate/activate", + "name": "shoppings_customers_authenticate_activate_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "mobile", + "name" + ], + "description": "Creation information of citizen verification." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "description": "Activate citizenship.\n\n{@link IShoppingCustomer Customer} activates his/her\n{@link IShoppingCitizen citizenship} with mobile number and real name.\n\nIf the custommer already {@link join joined} to the\n{@link IShoppingMember membership}, then you can skip the citizenship\n{@link activation } function calling everytime you log in from now on.\nOf course, such story would be same to the {@link external } function, too.\n\nFor reference, as described in the {@link create } function, before calling\nthis `activate` function, you must first create a customer record and token\nby calling the {@link create } function." + }, + { + "method": "post", + "path": "/shoppings/customers/authenticate/external", + "name": "shoppings_customers_authenticate_external_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "password": { + "type": "string", + "title": "Password of external user from the external system", + "description": "Password of external user from the external system.\n\nThis is a password issued to the user by an external service,\nand is by no means the actual user password. However, for\n{@link IShoppingCustomer customers} who entered the same\napplication and code as the current external system user, this is\nto determine whether to view this as a correct external system\nuser or a violation." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "citizen", + "application", + "uid", + "nickname", + "password", + "data" + ], + "description": "Creation information of external user." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "description": "Enroll external user info.\n\n{@link IShoppingCustomer Customer} enrolls his/her\n{@link IShoppingExternalUser external user} information from other service.\n\nIt has similar effect with the {@link join membership joining} function,\nso that if you've performed the {@link IShoppingCitizen citizenship}\n{@link activate activation} too, then you can skip the {@link activate }\nfunction calling everytime you call this `external` function with same\ninfo from now on. Also, if the person had\n{@link IShoppingOrder purchased} with {@link activate } and {@link join }\nfunction calling, you can also access to the order history too. In other\nwords, activity details prior to external server registration can also be\naccessed with continuity.\n\nFor reference, as described in the {@link create } function, before calling\nthis `external` function, you must first create a customer record and token\nby calling the {@link create } function." + }, + { + "method": "put", + "path": "/shoppings/customers/authenticate/password/change", + "name": "shoppings_customers_authenticate_password_change_put", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "oldbie": { + "type": "string", + "title": "Current password", + "description": "Current password." + }, + "newbie": { + "type": "string", + "title": "The new password to change", + "description": "The new password to change." + } + }, + "required": [ + "oldbie", + "newbie" + ], + "description": "Request info of password change." + } + } + } + ], + "description": "Change password.\n\nChange password of {@link IShoppingMember member} with the current password.\n\nThe reason why the current password is required is for security." + }, + { + "method": "post", + "path": "/shoppings/customers/deposits/charges", + "name": "shoppings_customers_deposits_charges_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "value": { + "type": "number" + } + }, + "required": [ + "value" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "publish": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "paid_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancelled_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at" + ], + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "value": { + "type": "number" + } + }, + "required": [ + "id", + "customer", + "publish", + "created_at", + "value" + ] + }, + "description": "Create a new deposit charge application.\n\nCreate a new {@link IShoppingDepositCharge deposit charge application}.\n\nBy the way, this function does not mean completion the deposit charge, but\nmeans just {@link IShoppingCustomer customer} is appling the deposit charge.\nThe deposit charge be completed only when customer\n{@link IShoppingDepositChargePublish.publish pay} the deposit charge." + }, + { + "method": "patch", + "path": "/shoppings/customers/deposits/charges", + "name": "shoppings_customers_deposits_charges_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + }, + "state": { + "type": "string", + "enum": [ + "pending", + "published", + "payed", + "cancelled" + ] + }, + "publish": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "payment": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "required": [ + "state" + ] + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-value", + "-publish.created_at", + "-publish.paid_at", + "+value", + "+publish.created_at", + "+publish.paid_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "publish": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "paid_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancelled_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at" + ], + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "value": { + "type": "number" + } + }, + "required": [ + "id", + "customer", + "publish", + "created_at", + "value" + ] + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every deposit charges.\n\nList up every {@link IShoppingDepositCharge deposit charges} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDepositCharge.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingDepositCharge.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/customers/deposits/charges/{id}", + "name": "shoppings_customers_deposits_charges_getById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Target deposit charge's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "publish": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "paid_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancelled_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at" + ], + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "value": { + "type": "number" + } + }, + "required": [ + "id", + "customer", + "publish", + "created_at", + "value" + ] + }, + "description": "Get a deposit charge info.\n\nGet a {@link IShoppingDepositCharge deposit charge} information." + }, + { + "method": "put", + "path": "/shoppings/customers/deposits/charges/{id}", + "name": "shoppings_customers_deposits_charges_putById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Target deposit charge's " + }, + "body": { + "type": "object", + "properties": { + "value": { + "type": "number" + } + }, + "required": [ + "value" + ] + } + } + } + ], + "description": "Update a deposit charge application.\n\nUpdate value of a {@link IShoppingDepositCharge deposit charge application}\nthat has been applied by the {@link IShoppingCustomer }.\n\nIf the charge has been {@link IShoppingDepositChargePublish published},\nthen it is not possible to update the deposit charge. Only 410 gone exception\nwould be thrown." + }, + { + "method": "delete", + "path": "/shoppings/customers/deposits/charges/{id}", + "name": "shoppings_customers_deposits_charges_eraseById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Target deposit charge's " + } + } + } + ], + "description": "Erase a deposit charge application.\n\nErase a {@link IShoppingDepositCharge deposit charge application} that has been\napplied by the {@link IShoppingCustomer }.\n\nIf the charge has been {@link IShoppingDepositChargePublish published}, then\nit is not possible to erase the deposit charge. In that case, you've to cancel\nthe payment by calling the {@link publish.cancel } function." + }, + { + "method": "get", + "path": "/shoppings/customers/deposits/charges/{chargeId}/publish/able", + "name": "shoppings_customers_deposits_charges_publish_able_getByChargeid", + "parameters": [ + { + "type": "object", + "properties": { + "chargeId": { + "type": "string", + "format": "uuid", + "description": "Target charge's " + } + } + } + ], + "output": { + "type": "boolean" + }, + "description": "Check publishable.\n\nTest whether the {@link IShoppingDepositCharge charge} is publishable or not.\n\nIf the charge has not been {@link IShoppingDepositChargePublish published} and\nnot deleted yet, then it is possible to publish the charge" + }, + { + "method": "post", + "path": "/shoppings/customers/deposits/charges/{chargeId}/publish", + "name": "shoppings_customers_deposits_charges_publish_postByChargeid", + "parameters": [ + { + "type": "object", + "properties": { + "chargeId": { + "type": "string", + "format": "uuid", + "description": "Target charge's " + }, + "body": { + "type": "object", + "properties": { + "vendor": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "vendor", + "uid" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "paid_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancelled_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at" + ] + }, + "description": "Publish a charge.\n\n{@link IShoppingDepositChargePublish Publish} a\n{@link IShoppingDepositCharge charge} that has been applied by the\n{@link IShoppingCustomer } with payment information gotten from the\npayment vendor system.\n\nAlso, the payment time can be different with the publish time. For example,\nif the payment method is manual bank account transfer, then the payment\nwould be delayed until the customer actually transfer the money. In that\ncase, {@link IShoppingDepositChargePublish.paid_at } would be `null` value,\nso that you have to check it after calling this publish function." + }, + { + "method": "patch", + "path": "/shoppings/customers/deposits/histories", + "name": "shoppings_customers_deposits_histories_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "deposit": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + -1, + 1 + ] + } + } + }, + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-deposit.source", + "-deposit.code", + "-deposit.direction", + "+deposit.source", + "+deposit.code", + "+deposit.direction", + "-history.value", + "-history.created_at", + "+history.value", + "+history.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "deposit": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "source_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "citizen", + "deposit", + "source_id", + "value", + "balance", + "created_at" + ] + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every deposit histories.\n\nList up every {@link IShoppingDepositHistory deposit histories} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDepositHistory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingDepositHistory.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/customers/deposits/histories/{id}", + "name": "shoppings_customers_deposits_histories_getById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "deposit": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "source_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "citizen", + "deposit", + "source_id", + "value", + "balance", + "created_at" + ] + }, + "description": "Get a deposit history info.\n\nGet a {@link IShoppingDepositHistory deposit history} information." + }, + { + "method": "get", + "path": "/shoppings/customers/deposits/histories/balance", + "name": "shoppings_customers_deposits_histories_balance_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "number" + }, + "description": "Get balance of the deposit.\n\nGet current balance of the deposit of the {@link IShoppingCustomer customer}." + }, + { + "method": "patch", + "path": "/shoppings/customers/mileages/histories", + "name": "shoppings_customers_mileages_histories_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "mileage": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + -1, + 1 + ] + } + } + }, + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-mileage.source", + "-mileage.code", + "-mileage.direction", + "+mileage.source", + "+mileage.code", + "+mileage.direction", + "-history.value", + "-history.created_at", + "+history.value", + "+history.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "mileage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "source_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "citizen", + "mileage", + "source_id", + "value", + "balance", + "created_at" + ] + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every mileage histories.\n\nList up every {@link IShoppingMileageHistory mileage histories} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileageHistory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingMileageHistory.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/customers/mileages/histories/{id}", + "name": "shoppings_customers_mileages_histories_getById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target mileage history's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "mileage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "source_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "citizen", + "mileage", + "source_id", + "value", + "balance", + "created_at" + ] + }, + "description": "Get a mileage history info.\n\nGet a {@link IShoppingMileageHistory mileage history} information." + }, + { + "method": "get", + "path": "/shoppings/customers/mileages/histories/balance", + "name": "shoppings_customers_mileages_histories_balance_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "number" + }, + "description": "Get balance of the mileage.\n\nGet current balance of the mileage of the {@link IShoppingCustomer customer}." + }, + { + "method": "put", + "path": "/shoppings/customers/carts/{cartId}/commodities/{id}", + "name": "shoppings_customers_carts_commodities_putByCartidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "cartId": { + "type": "string", + "format": "uuid", + "nullable": true, + "description": "Belonged cart's ID" + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target commodity's " + }, + "body": { + "type": "object", + "properties": { + "volume": { + "type": "integer", + "minimum": 1, + "title": "Volume of the commodity to purchase", + "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity } values." + } + }, + "required": [ + "volume" + ], + "description": "Update information of a shopping cart commodity." + } + } + } + ], + "description": "Update a commodity (volume).\n\nUpdate a {@link IShoppingCartCommodity commodity}'s volume in the\nshopping cart.\n\nIf the *cartId* is different with the belonged cart's ID, then 404 not\nfound exception would be thrown. Otherwise, the *cartId* has `null` value,\nsuch dependency checking would be skipped, but still ownership would be\nvalidated.\n\nAlso, if target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock} suddenly, then 410\ngone error would be thrown, either." + }, + { + "method": "delete", + "path": "/shoppings/customers/carts/{cartId}/commodities/{id}", + "name": "shoppings_customers_carts_commodities_eraseByCartidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "cartId": { + "type": "string", + "format": "uuid", + "nullable": true, + "description": "Belonged cart's ID" + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target commodity's " + } + } + } + ], + "description": "Erase a commodity.\n\nErase a {@link IShoppingCartCommodity commodity} from the shopping cart.\n\nIf the commodity is on an {@link IShoppingOrder order} process, it is not\npossible to erase it. Instead, if the order has been\n{@link IShoppingOrderPublish published}, then it would not be appread in\nthe shopping cart more. If the order be erased, then you also can continue\nerasinng the commodity, neither." + }, + { + "method": "get", + "path": "/shoppings/customers/carts/{cartId}/commodities/{id}/replica", + "name": "shoppings_customers_carts_commodities_replica_getByCartidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "cartId": { + "type": "string", + "format": "uuid", + "nullable": true, + "description": "Belonged cart's ID" + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target commodity's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "sale_id": { + "type": "string", + "format": "uuid", + "title": "Target sale's {@link IShoppingSale.id }", + "description": "Target sale's {@link IShoppingSale.id }." + }, + "stocks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "unit_id": { + "type": "string", + "format": "uuid", + "title": "Target unit's {@link IShoppingSaleUnit.id }", + "description": "Target unit's {@link IShoppingSaleUnit.id }." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "Target stock's {@link IShoppingSaleUnitStock.id }", + "description": "Target stock's {@link IShoppingSaleUnitStock.id }.\n\nIt must be matched with the {@link choices } property." + }, + "choices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "option_id": { + "type": "string", + "format": "uuid", + "title": "Target option's {@link IShoppingSaleUnitOption.id }", + "description": "Target option's {@link IShoppingSaleUnitOption.id }." + }, + "candidate_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id }", + "description": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id }.\n\nWhen target option's type is `select`, then this attribute is not\n`null` but has a value." + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ], + "title": "Written value about the option", + "description": "Written value about the option.\n\nWhen target option's type is not `select`, but an atomic type value\nlike `boolean`, `number` or `string`, then this attribute is not\n`null` but has the matched atomic value." + } + }, + "required": [ + "option_id", + "candidate_id", + "value" + ], + "description": "Creation information of the choice for each option.\n\nWhen record being created, its corresponding structure would be\n{@link IShoppingSaleUnitStockChoice.IInvert }." + }, + "title": "Creation information of the choices for each option", + "description": "Creation information of the choices for each option." + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "Quantity of the stock to purchase", + "description": "Quantity of the stock to purchase.\n\nThis value is multiplied by the {@link IShoppingCartCommodity.volume }." + } + }, + "required": [ + "unit_id", + "stock_id", + "choices", + "quantity" + ], + "description": "Creation information of the commodity stock of shopping cart.\n\nWhen record being created, its corresponding structure would be\n{@link IShoppingSaleSnapshotUnit.IInvert } and\n{@link IShoppingSaleSnapshotUnitStock.IInvert }." + }, + "minItems": 1, + "title": "List of the stocks to be purchased", + "description": "List of the stocks to be purchased." + }, + "volume": { + "type": "integer", + "minimum": 1, + "title": "Volume of the commodity to purchase", + "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity } values." + }, + "accumulate": { + "type": "boolean", + "title": "Whether to accumulate the volume or not", + "description": "Whether to accumulate the volume or not.\n\nIf this attribute is not `false` and there's same commodity that\ncomposed with same stocks and options, then the volume will be\naccumulated to the existed one.\n\nOtherwise, duplicated commodity would be newly created." + } + }, + "required": [ + "sale_id", + "stocks", + "volume" + ], + "description": "Creation information of a shopping cart commodity." + }, + "description": "Get replica of a commodity.\n\nGet a {@link IShoppingCartCommodity.ICreate } typed info of the target\ncommodity for replication.\n\nBy the way, if the *cartId* is different with the belonged cart's ID,\nthen 404 not found exception would be thrown. Otherwise, the *cartId*\nhas `null` value, such dependency checking would be skipped, but still\nownership would be validated.\n\nAlso, if target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock} suddenly,\nthen 410 gone error would be thrown, either." + }, + { + "method": "delete", + "path": "/shoppings/customers/orders/{id}", + "name": "shoppings_customers_orders_eraseById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target order's " + } + } + } + ], + "description": "Erase an order application.\n\nErase an order application that has been applied by the\n{@link IShoppingCustomer }.\n\nIf the order has been {@link IShoppingOrderPublish published}, then it is\nnot possible to erase the order. In that case, you've to cancel the\npayment by calling the {@link publish.cancel } function." + }, + { + "method": "put", + "path": "/shoppings/customers/orders/{orderId}/goods/{id}/confirm", + "name": "shoppings_customers_orders_goods_confirm_putByOrderidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "orderId": { + "type": "string", + "format": "uuid", + "description": "Belonged order's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target good's " + } + } + } + ], + "description": "Confirm an order good.\n\nConfirm an {@link IShoppingOrderGood order good} that has been\ncompleted {@link IShoppingDelivery delivering} to the\n{@link IShoppingCustomer customer}.\n\nIn other words, belonged {@link IShoppingOrder order} must be\n{@link IShoppingPublish.paid_at published, paid} and delivery of\nthe good must be {@link IShoppingDeliveryJourney arrived} to the\ncustomer. If not, 428 unprocessable entity error would be thrown." + }, + { + "method": "get", + "path": "/shoppings/customers/orders/{orderId}/publish/able", + "name": "shoppings_customers_orders_publish_able_getByOrderid", + "parameters": [ + { + "type": "object", + "properties": { + "orderId": { + "type": "string", + "format": "uuid", + "description": "Target order's " + } + } + } + ], + "output": { + "type": "boolean" + }, + "description": "Check publishable.\n\nTest whether the {@link IShoppingOrder order} is publishable or not.\n\nIf the order has not been {@link IShoppingOrderPublish published} and\nnot deleted yet, then it is possible to publish the order. Even thouogh\ntarget {@link IShoppingSale sale} is suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, it is still possible\nto publish because the order already has been applied." + }, + { + "method": "post", + "path": "/shoppings/customers/orders/{orderId}/publish", + "name": "shoppings_customers_orders_publish_postByOrderid", + "parameters": [ + { + "type": "object", + "properties": { + "orderId": { + "type": "string", + "format": "uuid", + "description": "Target order's " + }, + "body": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "cash" + ] + }, + "address": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number to contact", + "description": "Mobile number to contact." + }, + "name": { + "type": "string", + "title": "Representative name of the address", + "description": "Representative name of the address.\n\nSometimes be receiver's name, and sometimes be place name." + }, + "country": { + "type": "string", + "title": "Country name", + "description": "Country name." + }, + "province": { + "type": "string", + "title": "Province name", + "description": "Province name." + }, + "city": { + "type": "string", + "title": "City name", + "description": "City name." + }, + "department": { + "type": "string", + "title": "Department name", + "description": "Department name." + }, + "possession": { + "type": "string", + "title": "Detailed address containing street name, building number, and room number", + "description": "Detailed address containing street name, building number, and room number." + }, + "zip_code": { + "type": "string", + "title": "Zip code, or postal code", + "description": "Zip code, or postal code." + }, + "special_note": { + "type": "string", + "nullable": true, + "title": "Special description if required", + "description": "Special description if required." + } + }, + "required": [ + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ] + }, + "vendor": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "type", + "address", + "vendor", + "uid" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "zero" + ] + }, + "address": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number to contact", + "description": "Mobile number to contact." + }, + "name": { + "type": "string", + "title": "Representative name of the address", + "description": "Representative name of the address.\n\nSometimes be receiver's name, and sometimes be place name." + }, + "country": { + "type": "string", + "title": "Country name", + "description": "Country name." + }, + "province": { + "type": "string", + "title": "Province name", + "description": "Province name." + }, + "city": { + "type": "string", + "title": "City name", + "description": "City name." + }, + "department": { + "type": "string", + "title": "Department name", + "description": "Department name." + }, + "possession": { + "type": "string", + "title": "Detailed address containing street name, building number, and room number", + "description": "Detailed address containing street name, building number, and room number." + }, + "zip_code": { + "type": "string", + "title": "Zip code, or postal code", + "description": "Zip code, or postal code." + }, + "special_note": { + "type": "string", + "nullable": true, + "title": "Special description if required", + "description": "Special description if required." + } + }, + "required": [ + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ] + } + }, + "required": [ + "type", + "address" + ] + } + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "deliveries": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "journeys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deletion time of the record", + "description": "Deletion time of the record." + }, + "type": { + "type": "string", + "enum": [ + "preparing", + "manufacturing", + "shipping", + "delivering" + ] + }, + "title": { + "type": "string", + "nullable": true, + "title": "Title of journey", + "description": "Title of journey." + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description of journey", + "description": "Description of journey." + }, + "started_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Start time of the journey", + "description": "Start time of the journey." + }, + "completed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "id", + "created_at", + "deleted_at", + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "Journey of delivery.\n\n`IShoppingDeliveryJourney` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing each journey of the delivery. For reference, the word journey\nmeans each step of the delivery process, such as preparing, shipping, and\ndelivering {@link IShoppingOrderGood goods} to the\n{@link IShoppingCustomer customer}." + }, + "title": "List of journeys of the delivery", + "description": "List of journeys of the delivery." + }, + "pieces": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "publish_id": { + "type": "string", + "format": "uuid", + "title": "Target order's {@link IShoppingOrderPublish.id }", + "description": "Target order's {@link IShoppingOrderPublish.id }." + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "Target good's {@link IShoppingOrderGood.id }", + "description": "Target good's {@link IShoppingOrderGood.id }." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "Target stock's {@link IShoppingSaleUnitStock.id }", + "description": "Target stock's {@link IShoppingSaleUnitStock.id }." + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "Quantity of the stock", + "description": "Quantity of the stock.\n\nIt can be precision value to express splitted shipping." + } + }, + "required": [ + "id", + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "Which stocks are delivered.\n\n`IShoppingDeliveryPiece` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing how much quantity is delivered for each\n{@link IShoppingSaleUnitStock stock} in {@link IShoppingOrder }.\n\nFor reference, as an order can be delivered in multiple times due to volume\nor weight problem, it is possible to have multiple `IShoppingDeliveryPiece`\nrecords for a single stock." + }, + "minItems": 1, + "title": "List of pieces of the delivery", + "description": "List of pieces of the delivery." + }, + "shippers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "company": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "id", + "created_at", + "company", + "name", + "mobile" + ] + }, + "title": "List of shippers of the delivery", + "description": "List of shippers of the delivery." + }, + "state": { + "type": "string", + "enum": [ + "none", + "underway", + "preparing", + "manufacturing", + "shipping", + "delivering", + "arrived" + ], + "description": "State of delivery\n\n- `none`: No delivery or journey record\n- `underway`: Some pieces are over preparing, but others are not\n- `preparing`: At least preparing\n- `manufacturing`: At least manufacturing\n- `shipping`: At least shipping\n- `delivering`: At least delivering\n- `arrived`: Every pieces are arrived" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "id", + "seller", + "journeys", + "pieces", + "shippers", + "state", + "created_at" + ], + "description": "Delivery information.\n\nWhen delivering {@link IShoppingOrderGood goods} to\n{@link IShoppingCustomer customer}, {@link IShoppingSeller seller} can deliver\nmultiple {@link IShoppingSaleUnitStock stocks}, goods at once. Also, it is\npossible to deliver a stock or good in multiple times due to physical restriction\nlike volume or weight problem.\n\nAs you can see from above, the relationship between delivery with\n{@link IShoppingOrder order} (or {@link IShoppingOrderGood good}) is not 1: 1 or\nN: 1, but M: N. Entity `IShoppingDelivery` has been designed to represent such\nrelationship, by referencing target stocks or goods through subsidiary entity\n{@link IShoppingDeliveryPiece }.\n\nAlso, delivery does not end with only one step. It has multiple processes like\nmanufacturing, planning, shipping and delivering. Those steps are represented by\nanother subsidiary entity {@link IShoppingDeliveryJourney }." + }, + "title": "List of deliveries", + "description": "List of deliveries.\n\nAn {@link IShoppingOrder order} can be delivered in multiple times.\nOf course, the opposite case is also possible, that a\n{@link IShoppingDelivery delivery} can be composed of multiple orders." + }, + "state": { + "type": "string", + "enum": [ + "none", + "underway", + "preparing", + "manufacturing", + "shipping", + "delivering", + "arrived" + ], + "description": "State of delivery\n\n- `none`: No delivery or journey record\n- `underway`: Some pieces are over preparing, but others are not\n- `preparing`: At least preparing\n- `manufacturing`: At least manufacturing\n- `shipping`: At least shipping\n- `delivering`: At least delivering\n- `arrived`: Every pieces are arrived" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + }, + "paid_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Time when the order was paid", + "description": "Time when the order was paid." + }, + "cancelled_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Time when the payment was cancelled", + "description": "Time when the payment was cancelled." + }, + "address": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number to contact", + "description": "Mobile number to contact." + }, + "name": { + "type": "string", + "title": "Representative name of the address", + "description": "Representative name of the address.\n\nSometimes be receiver's name, and sometimes be place name." + }, + "country": { + "type": "string", + "title": "Country name", + "description": "Country name." + }, + "province": { + "type": "string", + "title": "Province name", + "description": "Province name." + }, + "city": { + "type": "string", + "title": "City name", + "description": "City name." + }, + "department": { + "type": "string", + "title": "Department name", + "description": "Department name." + }, + "possession": { + "type": "string", + "title": "Detailed address containing street name, building number, and room number", + "description": "Detailed address containing street name, building number, and room number." + }, + "zip_code": { + "type": "string", + "title": "Zip code, or postal code", + "description": "Zip code, or postal code." + }, + "special_note": { + "type": "string", + "nullable": true, + "title": "Special description if required", + "description": "Special description if required." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ], + "description": "The address information." + } + }, + "required": [ + "deliveries", + "state", + "id", + "created_at", + "paid_at", + "cancelled_at", + "address" + ], + "description": "Order completion and payment information.\n\n`IShoppingOrderPublish` is an entity that embodies the series of processes\nin which a {@link IShoppingCustomer customer} pays for his or her\n{@link IShoppingOrder order}, thereby completing the order. And only after\nthe order is {@link paid_at completed}, can the {@link IShoppingSeller seller}\nrecognize that the customer has purchased his product.\n\nBy the way, please note that just because the `IShoppingOrderPublish` record\nexists, it does not mean that the payment has been completed. Of course, with\n\"credit cards\" and \"Google Pay\", payment application and payment occur at the\nsame time. However, there are some cases where payment is made after the\npayment application, such as \"bank transfer\" or \"virtual account payment\".\nTherefore, to see the completion of payment, be sure to check the\n{@link paid_at } property.\n\nIn addition, even after payment has been made, there may be cases where it is\nsuddenly cancelled, so please be aware of this as well." + }, + "description": "Publish an order.\n\n{@link IShoppingOrderPublish Publish} an {@link IShoppingOrder order} that\nhas been applied by the {@link IShoppingCustomer } with\n{@link IShoppingAddress address} to delivery and payment information gotten\nfrom the payment vendor system.\n\nIf the order has been discounted for entire order price, then no need\nto send payment vendor info. Instead, only address info is required.\n\nAlso, the payment time can be different with the publish time. For example,\nif the payment method is manual bank account transfer, then the payment\nwould be delayed until the customer actually transfer the money. In that\ncase, {@link IShoppingOrderPublish.paid_at } would be `null` value, so\nthat you have to check it after calling this publish function." + }, + { + "method": "delete", + "path": "/shoppings/customers/orders/{orderId}/publish", + "name": "shoppings_customers_orders_publish_eraseByOrderid", + "parameters": [ + { + "type": "object", + "properties": { + "orderId": { + "type": "string", + "format": "uuid", + "description": "Target order's " + } + } + } + ], + "description": "Cancel the publish (payment).\n\nCancel payment of an {@link IShoppingOrder order} that has been\n{@link IShoppingOrderPublish published}.\n\nIf target publish's payment method is manual bank account transfer,\nthen it would be cancelled directly. If not, then payment cancel\nrequest would be sent to the payment vendor system." + }, + { + "method": "post", + "path": "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments", + "name": "shoppings_customers_sales_questions_comments_postBySaleidAndInquiryid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Target inquiry's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + }, + { + "method": "patch", + "path": "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments", + "name": "shoppings_customers_sales_questions_comments_patchBySaleidAndInquiryid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the comments with pagination and searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + { + "method": "get", + "path": "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments/{id}", + "name": "shoppings_customers_sales_questions_comments_getBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + { + "method": "put", + "path": "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments/{id}", + "name": "shoppings_customers_sales_questions_comments_putBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot content of the comment." + }, + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "post", + "path": "/shoppings/customers/sales/{saleId}/questions", + "name": "shoppings_customers_sales_questions_postBySaleid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "body": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "secret", + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the question." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "type": { + "type": "string", + "enum": [ + "question" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "secret", + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Question about sale snapshot.\n\n`IShoppingSaleQuestion` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} wants to ask something\nabout a {@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at\nthe time) registered by the {@link IShoppingSeller seller}.\n\nAnd, like most shopping malls, `IShoppingSaleQuestion` also provides\na {@link secret } attribute, allowing you to create a \"secret message\" that can\nonly be viewed by the seller and the customer who wrote the question." + }, + "description": "Write a question article.\n\nWhen a {@link IShoppingCustomer customer} wants to ask something about\na specific {@link IShoppingSale sale}, he/she can ask it by writing a\nnew {@link IShoppingSaleQuestion question article}.\n\nIf the customer does not want to reveal his/her identify and question,\nhe/she can write the question as a secret article. In that case, only\nthe customer and the related {@link IShoppingSeller seller} can see\nthe {@link at detailed content}. Also, such secret question's title and\nwriter name would be masked with `*` characters in the\n{@link index pagiation API}." + }, + { + "method": "patch", + "path": "/shoppings/customers/sales/{saleId}/questions", + "name": "shoppings_customers_sales_questions_patchBySaleid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the question." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/customers/sales/{saleId}/questions/{id}", + "name": "shoppings_customers_sales_questions_getBySaleidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target question's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "type": { + "type": "string", + "enum": [ + "question" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "secret", + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Question about sale snapshot.\n\n`IShoppingSaleQuestion` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} wants to ask something\nabout a {@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at\nthe time) registered by the {@link IShoppingSeller seller}.\n\nAnd, like most shopping malls, `IShoppingSaleQuestion` also provides\na {@link secret } attribute, allowing you to create a \"secret message\" that can\nonly be viewed by the seller and the customer who wrote the question." + }, + "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret }\nvalue is `false`." + }, + { + "method": "post", + "path": "/shoppings/customers/sales/{saleId}/questions/{id}", + "name": "shoppings_customers_sales_questions_postBySaleidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target question's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the article." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "description": "Update a question.\n\nUpdate a {@link IShoppingSaleQuestion question}'s content.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleQuestion.ISnapshot snapshot}. And this is made public\nto everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "patch", + "path": "/shoppings/customers/sales/{saleId}/questions/abridges", + "name": "shoppings_customers_sales_questions_abridges_patchBySaleid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the question." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at } function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + }, + { + "method": "post", + "path": "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments", + "name": "shoppings_customers_sales_reviews_comments_postBySaleidAndInquiryid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Target inquiry's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + }, + { + "method": "patch", + "path": "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments", + "name": "shoppings_customers_sales_reviews_comments_patchBySaleidAndInquiryid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the comments with pagination and searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + { + "method": "get", + "path": "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments/{id}", + "name": "shoppings_customers_sales_reviews_comments_getBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + { + "method": "put", + "path": "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments/{id}", + "name": "shoppings_customers_sales_reviews_comments_putBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot content of the comment." + }, + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "post", + "path": "/shoppings/customers/sales/{saleId}/reviews", + "name": "shoppings_customers_sales_reviews_postBySaleid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "body": { + "type": "object", + "properties": { + "good_id": { + "type": "string", + "format": "uuid", + "title": "Target good's {@link IShoppingOrderGood.id }", + "description": "Target good's {@link IShoppingOrderGood.id }." + }, + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "good_id", + "score", + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the review." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "review" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot content of the review article." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Reviews for sale snapshots.\n\n`IShoppingSaleReview` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} purchases a\n{@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at the time)\nregistered by the {@link IShoppingSeller seller} as a product and leaves a\nreview and rating for it.\n\nFor reference, `IShoppingSaleReview` and\n{@link IShoppingOrderGod shopping_order_goods} have a logarithmic relationship\nof N: 1, but this does not mean that customers can continue to write reviews\nfor the same product indefinitely. Wouldn't there be restrictions, such as\nif you write a review once, you can write an additional review a month later?" + }, + "description": "Write a review article.\n\nWhen a {@link IShoppingCustomer customer} has purchased a specific\n{@link IShoppingSale sale} and get {@link IShoppingDelivery delivered} it,\nhe/she can write a {@link IShoppingSaleReview review} article about the sale.\n\nIf try to write a review article without purchasing or the delivery has not\nbeen completed, 428 unprocessable entity error would be thrown. Also, the\ncustomer can write multiple review articles per an order, but the next\narticle can be written after 2 weeks from the previous article. If not,\n428 unprocessable entity error would be thrown, either." + }, + { + "method": "patch", + "path": "/shoppings/customers/sales/{saleId}/reviews", + "name": "shoppings_customers_sales_reviews_patchBySaleid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at", + "-score", + "+score" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the review." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/customers/sales/{saleId}/reviews/{id}", + "name": "shoppings_customers_sales_reviews_getBySaleidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target review's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "review" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot content of the review article." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Reviews for sale snapshots.\n\n`IShoppingSaleReview` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} purchases a\n{@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at the time)\nregistered by the {@link IShoppingSeller seller} as a product and leaves a\nreview and rating for it.\n\nFor reference, `IShoppingSaleReview` and\n{@link IShoppingOrderGod shopping_order_goods} have a logarithmic relationship\nof N: 1, but this does not mean that customers can continue to write reviews\nfor the same product indefinitely. Wouldn't there be restrictions, such as\nif you write a review once, you can write an additional review a month later?" + }, + "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales." + }, + { + "method": "post", + "path": "/shoppings/customers/sales/{saleId}/reviews/{id}", + "name": "shoppings_customers_sales_reviews_postBySaleidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target review's " + }, + "body": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "format", + "title", + "body", + "files" + ], + "description": "Updating information of the review." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot content of the review article." + }, + "description": "Update a review.\n\nUpdadte a {@link IShoppingSaleReview review}'s content and score.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleReview.ISnapshot snapshot}. And this is made public\nto everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "patch", + "path": "/shoppings/customers/sales/{saleId}/reviews/abridges", + "name": "shoppings_customers_sales_reviews_abridges_patchBySaleid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at", + "-score", + "+score" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the review." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at } function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + }, + { + "method": "patch", + "path": "/shoppings/customers/systematic/channels", + "name": "shoppings_customers_systematic_channels_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-channel.code", + "-channel.name", + "-channel.created_at", + "+channel.code", + "+channel.name", + "+channel.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the channels with pagination and searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + }, + { + "method": "patch", + "path": "/shoppings/customers/systematic/sections", + "name": "shoppings_customers_systematic_sections_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-section.code", + "-section.name", + "-section.created_at", + "+section.code", + "+section.name", + "+section.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the sections with pagination and searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/customers/systematic/sections/{id}", + "name": "shoppings_customers_systematic_sections_getById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target section's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." + }, + { + "method": "get", + "path": "/shoppings/customers/systematic/sections/{code}/get", + "name": "shoppings_customers_systematic_sections_get_getByCode", + "parameters": [ + { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Target section's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code." + }, + { + "method": "get", + "path": "/shoppings/sellers/authenticate", + "name": "shoppings_sellers_authenticate_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "description": "Get seller information.\n\nGet {@link IShoppingSeller.IInvert seller} information of\ncurrent {@link IShoppingCustomer customer}.\n\nIf current {@link IShoppingMember member} is not an seller,\nit throws 403 forbidden exception." + }, + { + "method": "post", + "path": "/shoppings/sellers/authenticate", + "name": "shoppings_sellers_authenticate_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": {} + } + } + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "description": "Join as an seller.\n\nJoin as an seller with {@link IShoppingSeller.IJoin joining info}.\n\nThis method is allowed only when the {@link IShoppingCustomer customer} already\nhas joined the {@link IShoppingMember membership}. IF not, he (she) must\naccomplish it before. If not, 403 forbidden exception would be thrown." + }, + { + "method": "put", + "path": "/shoppings/sellers/authenticate/login", + "name": "shoppings_sellers_authenticate_login_put", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "title": "Email address of member", + "description": "Email address of member.\n\nIf the member has multiple email addresses, just use one of them." + }, + "password": { + "type": "string", + "title": "Password of the member account", + "description": "Password of the member account." + } + }, + "required": [ + "email", + "password" + ], + "description": "Login request info." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "description": "Login as an seller.\n\nLogin as an seller with {@link IShoppingSeller.ILogin login info}.\n\nThis method has exactly same effect with\n{@link ShoppingApi.functional.customers.authenticate.login } function, but\nreturned type is a llttle different. The similar function returns\n{@link IShoppingCustomer } type that starting from the customer information, so\nthat you have to access to the seller info through\n`customer.member.seller`. In contrast with that, this method returns\n{@link IShoppingSeller.IInvert } type that starting from the seller\ninfo, so that can access to the customer info through `seller.customer`.\n\nOf course, to use this function, you had to {@link join } as an seller\nbefore. If not, 403 forbidden exception would be thrown," + }, + { + "method": "post", + "path": "/shoppings/sellers/deliveries", + "name": "shoppings_sellers_deliveries_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "pieces": { + "type": "array", + "items": { + "type": "object", + "properties": { + "publish_id": { + "type": "string", + "format": "uuid", + "title": "Target order's {@link IShoppingOrderPublish.id }", + "description": "Target order's {@link IShoppingOrderPublish.id }." + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "Target good's {@link IShoppingOrderGood.id }", + "description": "Target good's {@link IShoppingOrderGood.id }." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "Target stock's {@link IShoppingSaleUnitStock.id }", + "description": "Target stock's {@link IShoppingSaleUnitStock.id }." + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "Quantity of the stock", + "description": "Quantity of the stock.\n\nIt can be precision value to express splitted shipping." + } + }, + "required": [ + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "Creation information of the delivery piece." + }, + "minItems": 1, + "title": "List of pieces of the delivery", + "description": "List of pieces of the delivery." + }, + "journeys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "preparing", + "manufacturing", + "shipping", + "delivering" + ], + "title": "Type of journey", + "description": "Type of journey.\n\n- preparing\n- manufacturing\n- shipping\n- delivering" + }, + "title": { + "type": "string", + "nullable": true, + "title": "Title of journey", + "description": "Title of journey." + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description of journey", + "description": "Description of journey." + }, + "started_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Start time of the journey", + "description": "Start time of the journey." + }, + "completed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "Creation information of the delivery journey." + }, + "title": "List of journeys of the delivery", + "description": "List of journeys of the delivery.\n\nThis is initial data, and it is also possible to accumulate journey data\nafter the delivery creation." + }, + "shippers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "company": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "company", + "name", + "mobile" + ] + }, + "title": "List of shippers of the delivery", + "description": "List of shippers of the delivery." + } + }, + "required": [ + "pieces", + "journeys", + "shippers" + ], + "description": "Creation information of the delivery." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "journeys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deletion time of the record", + "description": "Deletion time of the record." + }, + "type": { + "type": "string", + "enum": [ + "preparing", + "manufacturing", + "shipping", + "delivering" + ] + }, + "title": { + "type": "string", + "nullable": true, + "title": "Title of journey", + "description": "Title of journey." + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description of journey", + "description": "Description of journey." + }, + "started_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Start time of the journey", + "description": "Start time of the journey." + }, + "completed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "id", + "created_at", + "deleted_at", + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "Journey of delivery.\n\n`IShoppingDeliveryJourney` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing each journey of the delivery. For reference, the word journey\nmeans each step of the delivery process, such as preparing, shipping, and\ndelivering {@link IShoppingOrderGood goods} to the\n{@link IShoppingCustomer customer}." + }, + "title": "List of journeys of the delivery", + "description": "List of journeys of the delivery." + }, + "pieces": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "publish_id": { + "type": "string", + "format": "uuid", + "title": "Target order's {@link IShoppingOrderPublish.id }", + "description": "Target order's {@link IShoppingOrderPublish.id }." + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "Target good's {@link IShoppingOrderGood.id }", + "description": "Target good's {@link IShoppingOrderGood.id }." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "Target stock's {@link IShoppingSaleUnitStock.id }", + "description": "Target stock's {@link IShoppingSaleUnitStock.id }." + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "Quantity of the stock", + "description": "Quantity of the stock.\n\nIt can be precision value to express splitted shipping." + } + }, + "required": [ + "id", + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "Which stocks are delivered.\n\n`IShoppingDeliveryPiece` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing how much quantity is delivered for each\n{@link IShoppingSaleUnitStock stock} in {@link IShoppingOrder }.\n\nFor reference, as an order can be delivered in multiple times due to volume\nor weight problem, it is possible to have multiple `IShoppingDeliveryPiece`\nrecords for a single stock." + }, + "minItems": 1, + "title": "List of pieces of the delivery", + "description": "List of pieces of the delivery." + }, + "shippers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "company": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "id", + "created_at", + "company", + "name", + "mobile" + ] + }, + "title": "List of shippers of the delivery", + "description": "List of shippers of the delivery." + }, + "state": { + "type": "string", + "enum": [ + "none", + "underway", + "preparing", + "manufacturing", + "shipping", + "delivering", + "arrived" + ], + "description": "State of delivery\n\n- `none`: No delivery or journey record\n- `underway`: Some pieces are over preparing, but others are not\n- `preparing`: At least preparing\n- `manufacturing`: At least manufacturing\n- `shipping`: At least shipping\n- `delivering`: At least delivering\n- `arrived`: Every pieces are arrived" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "id", + "seller", + "journeys", + "pieces", + "shippers", + "state", + "created_at" + ], + "description": "Delivery information.\n\nWhen delivering {@link IShoppingOrderGood goods} to\n{@link IShoppingCustomer customer}, {@link IShoppingSeller seller} can deliver\nmultiple {@link IShoppingSaleUnitStock stocks}, goods at once. Also, it is\npossible to deliver a stock or good in multiple times due to physical restriction\nlike volume or weight problem.\n\nAs you can see from above, the relationship between delivery with\n{@link IShoppingOrder order} (or {@link IShoppingOrderGood good}) is not 1: 1 or\nN: 1, but M: N. Entity `IShoppingDelivery` has been designed to represent such\nrelationship, by referencing target stocks or goods through subsidiary entity\n{@link IShoppingDeliveryPiece }.\n\nAlso, delivery does not end with only one step. It has multiple processes like\nmanufacturing, planning, shipping and delivering. Those steps are represented by\nanother subsidiary entity {@link IShoppingDeliveryJourney }." + }, + "description": "Create a delivery.\n\nCreate a {@link IShoppingDelivery delivery} record targetting\n{@link IShoppingOrder orders}, their {@link IShoppingOrderGood goods} and\n{@link IShoppingSaleUnitStock stocks} ({@link IShoppingDeliveryPiece }) with\n{@link IShoppingDeliveryJourney journeys} and\n{@link IShoppingDeliveryShipper shippers} info.\n\nNote that, composition of the {@link IShoppingDeliveryPiece } must not over\nthe required. To identify which pieces are required, recommend to call\nthe {@link incompletes } function with target orders'\n{@link IShoppingOrderPublish.id }s before calling this one." + }, + { + "method": "patch", + "path": "/shoppings/sellers/deliveries/incompletes", + "name": "shoppings_sellers_deliveries_incompletes_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "publish_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "publish_ids" + ] + } + } + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "publish_id": { + "type": "string", + "format": "uuid", + "title": "Target order's {@link IShoppingOrderPublish.id }", + "description": "Target order's {@link IShoppingOrderPublish.id }." + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "Target good's {@link IShoppingOrderGood.id }", + "description": "Target good's {@link IShoppingOrderGood.id }." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "Target stock's {@link IShoppingSaleUnitStock.id }", + "description": "Target stock's {@link IShoppingSaleUnitStock.id }." + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "Quantity of the stock", + "description": "Quantity of the stock.\n\nIt can be precision value to express splitted shipping." + } + }, + "required": [ + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "Creation information of the delivery piece." + } + }, + "description": "Get list of incomplete pieces.\n\nGet list of {@link IShoppingDeliveryPiece incomplete pieces} of target\norders' {@link IShoppingOrderPublish.id }s.\n\nIf you specify target orders' publish IDs, then this function returns\nincompleted pieces of the orders with computation as an Array of\n{@link IShoppingDeliveryPiece.ICreate } type.\n\nYou can utillize the result to make a huge {@link IShoppingDelivery delivery}\nfor integrated delivering, and also possible to make multiple deliveries for\nsplitted delivering." + }, + { + "method": "post", + "path": "/shoppings/sellers/deliveries/{deliveryId}/journeys", + "name": "shoppings_sellers_deliveries_journeys_postByDeliveryid", + "parameters": [ + { + "type": "object", + "properties": { + "deliveryId": { + "type": "string", + "format": "uuid", + "description": "Belonged delivery's " + }, + "body": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "preparing", + "manufacturing", + "shipping", + "delivering" + ], + "title": "Type of journey", + "description": "Type of journey.\n\n- preparing\n- manufacturing\n- shipping\n- delivering" + }, + "title": { + "type": "string", + "nullable": true, + "title": "Title of journey", + "description": "Title of journey." + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description of journey", + "description": "Description of journey." + }, + "started_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Start time of the journey", + "description": "Start time of the journey." + }, + "completed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "Creation information of the delivery journey." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deletion time of the record", + "description": "Deletion time of the record." + }, + "type": { + "type": "string", + "enum": [ + "preparing", + "manufacturing", + "shipping", + "delivering" + ] + }, + "title": { + "type": "string", + "nullable": true, + "title": "Title of journey", + "description": "Title of journey." + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description of journey", + "description": "Description of journey." + }, + "started_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Start time of the journey", + "description": "Start time of the journey." + }, + "completed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "id", + "created_at", + "deleted_at", + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "Journey of delivery.\n\n`IShoppingDeliveryJourney` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing each journey of the delivery. For reference, the word journey\nmeans each step of the delivery process, such as preparing, shipping, and\ndelivering {@link IShoppingOrderGood goods} to the\n{@link IShoppingCustomer customer}." + }, + "description": "Create a new journey.\n\nCreate a new {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}.\n\nThis action may change the related {@link IShoppingOrderGood.state }.\nAlso, if the target journey's type is \"delivering\", whether the property\n{@link IShoppingDeliveryJourney.completed_at } is null or not affects to\nthe related goods' states. If the property is not null, the state becomes\n\"arrived\". Otherwise, the state becomes \"delivering\"." + }, + { + "method": "put", + "path": "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}/complete", + "name": "shoppings_sellers_deliveries_journeys_complete_putByDeliveryidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "deliveryId": { + "type": "string", + "format": "uuid", + "description": "Belonged delivery's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target journey's " + }, + "body": { + "type": "object", + "properties": { + "completed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "completed_at" + ], + "description": "Completion information of the delivery journey." + } + } + } + ], + "description": "Complete a journey.\n\nComplete a {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}. In other words, fills the\n{@link IShoppingDeliveryJourney.completed_at } property with current time.\n\nIf the target journey's type is \"delivering\", this action may change\nthe related {@link IShoppingOrderGood.state goods' states} to be \"arrived\"." + }, + { + "method": "delete", + "path": "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}", + "name": "shoppings_sellers_deliveries_journeys_eraseByDeliveryidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "deliveryId": { + "type": "string", + "format": "uuid", + "description": "Belonged delivery's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target journey's " + } + } + } + ], + "description": "Erase a journey.\n\nErase a {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}.\n\nIf erasing journey is the last one of the belonged delivery, this action\nmay change the related {@link IShoppingOrderGood.state }. By erasing the last\njourney, the state rolls back to the previous." + }, + { + "method": "post", + "path": "/shoppings/sellers/deliveries/{deliveryId}/shippers", + "name": "shoppings_sellers_deliveries_shippers_postByDeliveryid", + "parameters": [ + { + "type": "object", + "properties": { + "deliveryId": { + "type": "string", + "format": "uuid", + "description": "Belonged delivery's " + }, + "body": { + "type": "object", + "properties": { + "company": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "company", + "name", + "mobile" + ] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "company": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "id", + "created_at", + "company", + "name", + "mobile" + ] + }, + "description": "Create a new shipper.\n\nCreate a new {@link IShoppingDeliveryShipper shipper} of the\n{@link IShoppingDelivery delivery}.\n\nThis action does not affect to the related {@link IShoppingOrder orders} or\n{@link IShoppingOrderGood goods} like {@link IShoppingDeliveryJourney }\nor {@link IShoppingDeliveryPiece } case, but just informs to the\n{@link IShoppingCustomer customer}." + }, + { + "method": "delete", + "path": "/shoppings/sellers/coupons/{id}", + "name": "shoppings_sellers_coupons_eraseById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Target coupon's " + } + } + } + ], + "description": "Erase a coupon.\n\nErase a {@link IShoppingCoupon coupon} with given ID.\n\nFor reference, if there're some {@link IShoppingCouponTicket tickets}\nwhich are already issued from the target coupon, they would not be affected.\nThose tickets are still valid until their expration time." + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{id}/open", + "name": "shoppings_sellers_sales_open_putById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target sale's " + }, + "body": { + "type": "object", + "properties": { + "opened_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Closing time of the sale", + "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." + } + }, + "required": [ + "opened_at", + "closed_at" + ], + "description": "Update opening time information of sale." + } + } + } + ], + "description": "Change opening and closing time of a sale.\n\nUpdate a {@link IShoppingSale sale}'s opening and closing time.\n\nBy the way, if the sale still be opened or closed, it is not possible to\nchange the opening time. In contrary, if the sale already had been opened\nbut still not closed, it is possible to change the closing time.\n\nOf course, if closing time is less than opening time or not,\n428 unprocessable entity error would be thrown." + }, + { + "method": "post", + "path": "/shoppings/sellers/sales/{id}/replica", + "name": "shoppings_sellers_sales_replica_postById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target sale's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "section_code": { + "type": "string", + "title": "Belonged section's {@link IShoppingSection.code }", + "description": "Belonged section's {@link IShoppingSection.code }." + }, + "status": { + "type": "string", + "enum": [ + "paused", + "suspended" + ], + "nullable": true, + "title": "Initial status of the sale", + "description": "Initial status of the sale.\n\n`null` or `undefined`: No restriction\n`paused`: Starts with {@link ITimestamps.paused_at paused} status\n`suspended`: Starts with {@link ITimestamps.suspended_at suspended} status" + }, + "opened_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Closing time of the sale", + "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." + }, + "content": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string" + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + } + }, + "thumbnails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + } + } + }, + "required": [ + "title", + "format", + "body", + "files", + "thumbnails" + ] + }, + "channels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "Target channel's {@link IShoppingChannel.code }", + "description": "Target channel's {@link IShoppingChannel.code }." + }, + "category_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "List of target categories' {@link IShoppingChannelCategory.id }s", + "description": "List of target categories' {@link IShoppingChannelCategory.id }s.\n\nIf empty, it means all categories of the channel is listing the sale." + } + }, + "required": [ + "code", + "category_ids" + ], + "description": "Creation information of the target channel (and categories) of sale to sell." + } + }, + "units": { + "type": "array", + "items": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "string", + "number", + "boolean" + ], + "title": "Type of descriptive option", + "description": "Type of descriptive option.\n\nWhich typed value should be written when purchasing." + }, + "name": { + "type": "string", + "title": "Readable name of the option", + "description": "Readable name of the option." + } + }, + "required": [ + "type", + "name" + ], + "description": "Creation information of the descriptive option." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "select" + ], + "title": "Discriminant for the type of selectable option", + "description": "Discriminant for the type of selectable option." + }, + "name": { + "type": "string", + "title": "Represents the name of the option", + "description": "Represents the name of the option." + }, + "variable": { + "type": "boolean", + "title": "Whether the option is variable or not", + "description": "Whether the option is variable or not.\n\nWhen type of current option is \"select\", this attribute means whether\nselecting different candidate value affects the final stock or not." + }, + "candidates": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Represents the name of the candidate value", + "description": "Represents the name of the candidate value." + } + }, + "required": [ + "name" + ], + "description": "Creation information of the candidate value." + }, + "minItems": 1, + "title": "List of candidate values", + "description": "List of candidate values." + } + }, + "required": [ + "type", + "name", + "variable", + "candidates" + ], + "description": "Creation information of the selectable option." + } + ] + }, + "title": "List of options", + "description": "List of options." + }, + "stocks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Representative name of the stock", + "description": "Representative name of the stock." + }, + "price": { + "type": "object", + "properties": { + "nominal": { + "type": "number", + "minimum": 0, + "title": "Nominal price", + "description": "Nominal price.\n\nThis is not {@link real real price} to pay, but just a nominal price to show.\nIf this value is greater than the {@link real real price}, it would be shown\nlike {@link IShoppingSeller seller} is giving a discount." + }, + "real": { + "type": "number", + "minimum": 0, + "title": "Real price to pay", + "description": "Real price to pay." + } + }, + "required": [ + "nominal", + "real" + ], + "description": "Shopping price interface." + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "Initial inventory quantity", + "description": "Initial inventory quantity." + }, + "choices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "option_index": { + "type": "integer", + "description": "Target option's index number in\n{@link IShoppingSaleUnit.ICreate.options }." + }, + "candidate_index": { + "type": "integer", + "description": "Target candidate's index number in\n{@link IShoppingSaleUnitSelectableOption.ICreate.candidates }." + } + }, + "required": [ + "option_index", + "candidate_index" + ], + "description": "Creation information of stock choice." + }, + "title": "List of choices", + "description": "List of choices.\n\nWhich candidate values being chosen for each option." + } + }, + "required": [ + "name", + "price", + "quantity", + "choices" + ], + "description": "Creation information of the stock." + }, + "minItems": 1, + "title": "List of final stocks", + "description": "List of final stocks." + }, + "name": { + "type": "string", + "title": "Representative name of the unit", + "description": "Representative name of the unit." + }, + "primary": { + "type": "boolean", + "title": "Whether the unit is primary or not", + "description": "Whether the unit is primary or not.\n\nJust a labeling value." + }, + "required": { + "type": "boolean", + "title": "Whether the unit is required or not", + "description": "Whether the unit is required or not.\n\nWhen the unit is required, the customer must select the unit. If do not\nselect, customer can't buy it.\n\nFor example, if there's a sale \"Macbook Set\" and one of the unit is the\n\"Main Body\", is it possible to buy the \"Macbook Set\" without the\n\"Main Body\" unit? This property is for that case." + } + }, + "required": [ + "options", + "stocks", + "name", + "primary", + "required" + ], + "description": "Creation information of sale unit." + }, + "minItems": 1 + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "section_code", + "opened_at", + "closed_at", + "content", + "channels", + "units", + "tags" + ], + "description": "Creation information of sale." + }, + "description": "Get replica of a sale.\n\nGet a {@link IShoppingSale.ICreate } typed info of the target sale for\nreplication.\n\nIt would be useful for creating a new replication\n{@link IShoppingSale sale} with similar innformatiopn." + }, + { + "method": "delete", + "path": "/shoppings/sellers/sales/{id}/pause", + "name": "shoppings_sellers_sales_pause_eraseById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target sale's " + } + } + } + ], + "description": "Pause a sale.\n\nPause a {@link IShoppingSale sale} from {@link open opened} state.\nTherefore, the sale can not be operated again until it be\n{@link restore restored}. By the way, {@link IShoppingCustomer customer}\nstill can sale from the {@link index } and {@link at } API endpints, but\n\"paused\" label would be attached.\n\nAlso, customer no more can put into the shopping cart, either.\nEven the sale already had been put into the shopping cart, the\n{@link IShoppingCartCommodity commodity} will not be listed on the\nshopping cart. Also, it is not possible to appling an\n{@link IShoppingOrder order} with the paused sale's commodity, either.\n\nBy the way, if the sale already had been applied to an order, the order\ncan be {@link IShoppingOrderPublish published} and\n{@link IShoppingSeller seller} must {@link IShoppingDelivery deliver} the\ngood to the customer." + }, + { + "method": "delete", + "path": "/shoppings/sellers/sales/{id}/suspend", + "name": "shoppings_sellers_sales_suspend_eraseById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target sale's " + } + } + } + ], + "description": "Suspend a sale.\n\nSuspend a {@link IShoppingSale sale} from {@link open opened} state.\nTherefore, the sale can not be operated again until it be\n{@link restore restored} and {@link IShoppingCustomer customer} cannot\nsee the sale from the {@link index } and {@link at } API.\n\nAlso, customer no more can put into the shopping cart, either.\nEven the sale already had been put into the shopping cart, the\n{@link IShoppingCartCommodity commodity} will not be listed on the\nshopping cart. Also, it is not possible to appling an\n{@link IShoppingOrder order} with the suspended sale's commodity, either.\n\nBy the way, if the sale already had been applied to an order, the order\ncan be {@link IShoppingOrderPublish published} and\n{@link IShoppingSeller seller} must {@link IShoppingDelivery deliver} the\ngood to the customer." + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{id}/restore", + "name": "shoppings_sellers_sales_restore_putById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target sale's " + } + } + } + ], + "description": "Restore a sale\n\nRestore a {@link IShoppingSale sale} from {@link pause paused} or\n{@link suspend suspended} state\n\nTherefore the sale can be operated again if its\n{@link IShoppingSale.closed_at closing time} has not been reached.\nAlso, if a {@link IShoppingCustomer customer} had put the sale into the\nshopping cart when being paused or suspended, the\n{@link IShoppingCartCommodity commodity} will be listed again on the\nshopping cart." + }, + { + "method": "post", + "path": "/shoppings/sellers/sales/{saleId}/questions/{questionId}/answer", + "name": "shoppings_sellers_sales_questions_answer_postBySaleidAndQuestionid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "questionId": { + "type": "string", + "format": "uuid", + "description": "Target question's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the article." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Answers to questions about sale snapshots.\n\n`IShoppingSaleInquiryAnswer` is an entity that embodies the official\nanswer written by the {@link IShoppingSeller seller} to the\n{@link IShoppingSaleInquiry inquiry} written by the\n{@link IShoppingCustomer customer}.\n\nOf course, in addition to writing an official response like this, it is\nalso possible for the seller to communicate with the inqjuiry written\ncustomer and multiple customers through\n{@link IShoppingSaleInquiryComment comments} in the attribution inquiry.\n\nFor refererence, it is not possible to write comments on this answer.\nEncourage people to write comments on the inquiry article. This is to\nprevent comments from being scattered in both inquiry and answer\narticles." + }, + "description": "Write an answer article.\n\nWrite a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry question article} written by a\n{@link IShoppingCustomer }.\n\nNote that, this is the formal answer that can be written only one per\na question article (but {@link update updatable}). Therefore, it needs to\nguide the {@link IShoppingSeller seller} to write it carefully.\n\nAlso, as seller can write {@link IShoppingSaleInquiryComment comments} to\nthe question article as many as he/she wants, it would be useful for\nadditional communication." + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{saleId}/questions/{questionId}/answer", + "name": "shoppings_sellers_sales_questions_answer_putBySaleidAndQuestionid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "questionId": { + "type": "string", + "format": "uuid", + "description": "Target question's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the article." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ] + }, + "description": "Update an answer article.\n\nUpdate a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry question article} written by a\n{@link IShoppingCustomer }.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleInquiryAnswer.ISnapshot snapshot}. And this is made\npublic to everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "post", + "path": "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments", + "name": "shoppings_sellers_sales_questions_comments_postBySaleidAndInquiryid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Target inquiry's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments", + "name": "shoppings_sellers_sales_questions_comments_patchBySaleidAndInquiryid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the comments with pagination and searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + { + "method": "get", + "path": "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments/{id}", + "name": "shoppings_sellers_sales_questions_comments_getBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments/{id}", + "name": "shoppings_sellers_sales_questions_comments_putBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot content of the comment." + }, + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/questions", + "name": "shoppings_sellers_sales_questions_patchBySaleid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the question." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/questions/abridges", + "name": "shoppings_sellers_sales_questions_abridges_patchBySaleid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the question." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at } function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/sellers/sales/{saleId}/questions/{id}", + "name": "shoppings_sellers_sales_questions_getBySaleidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target question's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "type": { + "type": "string", + "enum": [ + "question" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "secret", + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Question about sale snapshot.\n\n`IShoppingSaleQuestion` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} wants to ask something\nabout a {@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at\nthe time) registered by the {@link IShoppingSeller seller}.\n\nAnd, like most shopping malls, `IShoppingSaleQuestion` also provides\na {@link secret } attribute, allowing you to create a \"secret message\" that can\nonly be viewed by the seller and the customer who wrote the question." + }, + "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret }\nvalue is `false`." + }, + { + "method": "post", + "path": "/shoppings/sellers/sales/{saleId}/reviews/{reviewId}/answer", + "name": "shoppings_sellers_sales_reviews_answer_postBySaleidAndReviewid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "reviewId": { + "type": "string", + "format": "uuid", + "description": "Target review's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the article." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Answers to questions about sale snapshots.\n\n`IShoppingSaleInquiryAnswer` is an entity that embodies the official\nanswer written by the {@link IShoppingSeller seller} to the\n{@link IShoppingSaleInquiry inquiry} written by the\n{@link IShoppingCustomer customer}.\n\nOf course, in addition to writing an official response like this, it is\nalso possible for the seller to communicate with the inqjuiry written\ncustomer and multiple customers through\n{@link IShoppingSaleInquiryComment comments} in the attribution inquiry.\n\nFor refererence, it is not possible to write comments on this answer.\nEncourage people to write comments on the inquiry article. This is to\nprevent comments from being scattered in both inquiry and answer\narticles." + }, + "description": "Write an answer article.\n\nWrite a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry review article} written by a\n{@link IShoppingCustomer }.\n\nNote that, this is the formal answer that can be written only one per\na review article (but {@link update updatable}). Therefore, it needs to\nguide the {@link IShoppingSeller seller} to write it carefully.\n\nAlso, as seller can write {@link IShoppingSaleInquiryComment comments} to\nthe review article as many as he/she wants, it would be useful for\nadditional communication." + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{saleId}/reviews/{reviewId}/answer", + "name": "shoppings_sellers_sales_reviews_answer_putBySaleidAndReviewid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "reviewId": { + "type": "string", + "format": "uuid", + "description": "Target review's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the article." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ] + }, + "description": "Update an answer article.\n\nUpdate a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry review article} written by a\n{@link IShoppingCustomer }.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a review articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleInquiryAnswer.ISnapshot snapshot}. And this is made\npublic to everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "post", + "path": "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments", + "name": "shoppings_sellers_sales_reviews_comments_postBySaleidAndInquiryid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Target inquiry's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments", + "name": "shoppings_sellers_sales_reviews_comments_patchBySaleidAndInquiryid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the comments with pagination and searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + { + "method": "get", + "path": "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments/{id}", + "name": "shoppings_sellers_sales_reviews_comments_getBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments/{id}", + "name": "shoppings_sellers_sales_reviews_comments_putBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "inquiryId": { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + }, + "body": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot content of the comment." + }, + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/reviews", + "name": "shoppings_sellers_sales_reviews_patchBySaleid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at", + "-score", + "+score" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the review." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/reviews/abridges", + "name": "shoppings_sellers_sales_reviews_abridges_patchBySaleid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at", + "-score", + "+score" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the review." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at } function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/sellers/sales/{saleId}/reviews/{id}", + "name": "shoppings_sellers_sales_reviews_getBySaleidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target review's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "review" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot content of the review article." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Reviews for sale snapshots.\n\n`IShoppingSaleReview` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} purchases a\n{@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at the time)\nregistered by the {@link IShoppingSeller seller} as a product and leaves a\nreview and rating for it.\n\nFor reference, `IShoppingSaleReview` and\n{@link IShoppingOrderGod shopping_order_goods} have a logarithmic relationship\nof N: 1, but this does not mean that customers can continue to write reviews\nfor the same product indefinitely. Wouldn't there be restrictions, such as\nif you write a review once, you can write an additional review a month later?" + }, + "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales." + }, + { + "method": "post", + "path": "/shoppings/sellers/sales/{saleId}/snapshots/{id}/replica", + "name": "shoppings_sellers_sales_snapshots_replica_postBySaleidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target snapshot's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "section_code": { + "type": "string", + "title": "Belonged section's {@link IShoppingSection.code }", + "description": "Belonged section's {@link IShoppingSection.code }." + }, + "status": { + "type": "string", + "enum": [ + "paused", + "suspended" + ], + "nullable": true, + "title": "Initial status of the sale", + "description": "Initial status of the sale.\n\n`null` or `undefined`: No restriction\n`paused`: Starts with {@link ITimestamps.paused_at paused} status\n`suspended`: Starts with {@link ITimestamps.suspended_at suspended} status" + }, + "opened_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Closing time of the sale", + "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." + }, + "content": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string" + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + } + }, + "thumbnails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + } + } + }, + "required": [ + "title", + "format", + "body", + "files", + "thumbnails" + ] + }, + "channels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "Target channel's {@link IShoppingChannel.code }", + "description": "Target channel's {@link IShoppingChannel.code }." + }, + "category_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "List of target categories' {@link IShoppingChannelCategory.id }s", + "description": "List of target categories' {@link IShoppingChannelCategory.id }s.\n\nIf empty, it means all categories of the channel is listing the sale." + } + }, + "required": [ + "code", + "category_ids" + ], + "description": "Creation information of the target channel (and categories) of sale to sell." + } + }, + "units": { + "type": "array", + "items": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "string", + "number", + "boolean" + ], + "title": "Type of descriptive option", + "description": "Type of descriptive option.\n\nWhich typed value should be written when purchasing." + }, + "name": { + "type": "string", + "title": "Readable name of the option", + "description": "Readable name of the option." + } + }, + "required": [ + "type", + "name" + ], + "description": "Creation information of the descriptive option." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "select" + ], + "title": "Discriminant for the type of selectable option", + "description": "Discriminant for the type of selectable option." + }, + "name": { + "type": "string", + "title": "Represents the name of the option", + "description": "Represents the name of the option." + }, + "variable": { + "type": "boolean", + "title": "Whether the option is variable or not", + "description": "Whether the option is variable or not.\n\nWhen type of current option is \"select\", this attribute means whether\nselecting different candidate value affects the final stock or not." + }, + "candidates": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Represents the name of the candidate value", + "description": "Represents the name of the candidate value." + } + }, + "required": [ + "name" + ], + "description": "Creation information of the candidate value." + }, + "minItems": 1, + "title": "List of candidate values", + "description": "List of candidate values." + } + }, + "required": [ + "type", + "name", + "variable", + "candidates" + ], + "description": "Creation information of the selectable option." + } + ] + }, + "title": "List of options", + "description": "List of options." + }, + "stocks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Representative name of the stock", + "description": "Representative name of the stock." + }, + "price": { + "type": "object", + "properties": { + "nominal": { + "type": "number", + "minimum": 0, + "title": "Nominal price", + "description": "Nominal price.\n\nThis is not {@link real real price} to pay, but just a nominal price to show.\nIf this value is greater than the {@link real real price}, it would be shown\nlike {@link IShoppingSeller seller} is giving a discount." + }, + "real": { + "type": "number", + "minimum": 0, + "title": "Real price to pay", + "description": "Real price to pay." + } + }, + "required": [ + "nominal", + "real" + ], + "description": "Shopping price interface." + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "Initial inventory quantity", + "description": "Initial inventory quantity." + }, + "choices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "option_index": { + "type": "integer", + "description": "Target option's index number in\n{@link IShoppingSaleUnit.ICreate.options }." + }, + "candidate_index": { + "type": "integer", + "description": "Target candidate's index number in\n{@link IShoppingSaleUnitSelectableOption.ICreate.candidates }." + } + }, + "required": [ + "option_index", + "candidate_index" + ], + "description": "Creation information of stock choice." + }, + "title": "List of choices", + "description": "List of choices.\n\nWhich candidate values being chosen for each option." + } + }, + "required": [ + "name", + "price", + "quantity", + "choices" + ], + "description": "Creation information of the stock." + }, + "minItems": 1, + "title": "List of final stocks", + "description": "List of final stocks." + }, + "name": { + "type": "string", + "title": "Representative name of the unit", + "description": "Representative name of the unit." + }, + "primary": { + "type": "boolean", + "title": "Whether the unit is primary or not", + "description": "Whether the unit is primary or not.\n\nJust a labeling value." + }, + "required": { + "type": "boolean", + "title": "Whether the unit is required or not", + "description": "Whether the unit is required or not.\n\nWhen the unit is required, the customer must select the unit. If do not\nselect, customer can't buy it.\n\nFor example, if there's a sale \"Macbook Set\" and one of the unit is the\n\"Main Body\", is it possible to buy the \"Macbook Set\" without the\n\"Main Body\" unit? This property is for that case." + } + }, + "required": [ + "options", + "stocks", + "name", + "primary", + "required" + ], + "description": "Creation information of sale unit." + }, + "minItems": 1 + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "section_code", + "opened_at", + "closed_at", + "content", + "channels", + "units", + "tags" + ], + "description": "Creation information of sale." + }, + "description": "Get replica of a snapshot.\n\nGet a {@link IShoppingSale.ICreate } typed info of the target\n{@link IShoppingSaleSnapshot snapshot} record for replication.\n\nIt would be useful for creating a new replication {@link IShoppingSale sale}\nfrom the old snapshot." + }, + { + "method": "post", + "path": "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements", + "name": "shoppings_sellers_sales_units_stocks_supplements_postBySaleidAndUnitidAndStockid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "unitId": { + "type": "string", + "format": "uuid", + "description": "Belonged unit's " + }, + "stockId": { + "type": "string", + "format": "uuid", + "description": "Target stock's " + }, + "body": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "title": "Supplemented quantity", + "description": "Supplemented quantity." + } + }, + "required": [ + "value" + ], + "description": "Creation information of the supplement." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "integer", + "title": "Supplemented quantity", + "description": "Supplemented quantity." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record.\n\nAnother words, the time when inventory of the stock being supplemented." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Supplementation of inventory quantity of stock.\n\nYou know what? If a {@link IShoppingSaleUnitStock stock} has been sold over\nits {@link IShoppingSaleUnitStock.ICreate.quantity initial inventory quantity},\nthe stock can't be sold anymore, because of out of stock. In that case, how the\n{@link IShoppingSeller } should do?\n\nWhen the sotck is sold out, seller can supplement the inventory record by\nregistering this `IShoppingSaleUnitStockSupplement` record. Right, this\n`IShoppingSaleUnitStockSupplement` is an entity that embodies the\nsupplementation of the inventory quantity of the belonged stock." + }, + "description": "Create a supplement.\n\nCreate a {@link IShoppingSaleUnitStockSupplement supplement history} of a\nspecific {@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be increased by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}." + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements", + "name": "shoppings_sellers_sales_units_stocks_supplements_patchBySaleidAndUnitidAndStockid", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "unitId": { + "type": "string", + "format": "uuid", + "description": "Belonged unit's " + }, + "stockId": { + "type": "string", + "format": "uuid", + "description": "Target stock's " + }, + "body": { + "type": "object", + "properties": { + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at" + ] + }, + "title": "Sortable columns", + "description": "Sortable columns." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request information of the stock supplement list." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "integer", + "title": "Supplemented quantity", + "description": "Supplemented quantity." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record.\n\nAnother words, the time when inventory of the stock being supplemented." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Supplementation of inventory quantity of stock.\n\nYou know what? If a {@link IShoppingSaleUnitStock stock} has been sold over\nits {@link IShoppingSaleUnitStock.ICreate.quantity initial inventory quantity},\nthe stock can't be sold anymore, because of out of stock. In that case, how the\n{@link IShoppingSeller } should do?\n\nWhen the sotck is sold out, seller can supplement the inventory record by\nregistering this `IShoppingSaleUnitStockSupplement` record. Right, this\n`IShoppingSaleUnitStockSupplement` is an entity that embodies the\nsupplementation of the inventory quantity of the belonged stock." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every supplements.\n\nList up every {@link IShoppingSaleUnitStockSupplement supplement histories}\nof a specific {@link IShoppingSaleUnitStock stock}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleUnitStockSupplement.IRequest.search search condition} in\nthe request body. Also, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingSaleUnitStockSupplement.IRequest.sort }\nproperty." + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements/{id}", + "name": "shoppings_sellers_sales_units_stocks_supplements_putBySaleidAndUnitidAndStockidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "unitId": { + "type": "string", + "format": "uuid", + "description": "Belonged unit's " + }, + "stockId": { + "type": "string", + "format": "uuid", + "description": "Target stock's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target supplement's " + }, + "body": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "title": "Supplemented quantity", + "description": "Supplemented quantity." + } + }, + "required": [ + "value" + ], + "description": "Creation information of the supplement." + } + } + } + ], + "description": "Update a supplement.\n\nUpdate quantity value of a {@link IShoppingSaleUnitStockSupplement supplement}\nof a specific {@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be changed by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}." + }, + { + "method": "delete", + "path": "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements/{id}", + "name": "shoppings_sellers_sales_units_stocks_supplements_eraseBySaleidAndUnitidAndStockidAndId", + "parameters": [ + { + "type": "object", + "properties": { + "saleId": { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + "unitId": { + "type": "string", + "format": "uuid", + "description": "Belonged unit's " + }, + "stockId": { + "type": "string", + "format": "uuid", + "description": "Target stock's " + }, + "id": { + "type": "string", + "format": "uuid", + "description": "Target supplement's " + } + } + } + ], + "description": "Erase a supplement.\n\nErase a {@link IShoppingSaleUnitStockSupplement supplement} of a specific\n{@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be decreased by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}." + }, + { + "method": "patch", + "path": "/shoppings/sellers/systematic/channels", + "name": "shoppings_sellers_systematic_channels_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-channel.code", + "-channel.name", + "-channel.created_at", + "+channel.code", + "+channel.name", + "+channel.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the channels with pagination and searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + }, + { + "method": "patch", + "path": "/shoppings/sellers/systematic/sections", + "name": "shoppings_sellers_systematic_sections_patch", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-section.code", + "-section.name", + "-section.created_at", + "+section.code", + "+section.name", + "+section.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the sections with pagination and searching/sorting options." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/sellers/systematic/sections/{id}", + "name": "shoppings_sellers_systematic_sections_getById", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Target section's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." + }, + { + "method": "get", + "path": "/shoppings/sellers/systematic/sections/{code}/get", + "name": "shoppings_sellers_systematic_sections_get_getByCode", + "parameters": [ + { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Target section's " + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code." + } + ], + "errors": [ + { + "method": "post", + "path": "/shoppings/admins/coupons", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/admins/coupons", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/coupons/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/admins/orders", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/orders/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/admins/sales", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/sales/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/admins/sales/{saleId}/snapshots", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/sales/{saleId}/snapshots/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/sales/{saleId}/snapshots/{id}/flip", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "post", + "path": "/shoppings/admins/systematic/channels/{channelCode}/categories", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/admins/systematic/channels/{channelCode}/categories", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}/invert", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/systematic/channels/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/admins/systematic/channels/hierarchical", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/systematic/channels/{code}/get", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/coupons", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/coupons/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "post", + "path": "/shoppings/customers/coupons/tickets", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/coupons/tickets", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/coupons/tickets/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "post", + "path": "/shoppings/customers/carts/{cartId}/commodities", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/carts/{cartId}/commodities", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/carts/{cartId}/commodities/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/carts/{cartId}/commodities/discountable", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "post", + "path": "/shoppings/customers/orders", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/orders", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/orders/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/orders/{id}/price", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/orders/{id}/discountable", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "put", + "path": "/shoppings/customers/orders/{id}/discount", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/sales", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/sales/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/sales/{saleId}/snapshots", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/sales/{saleId}/snapshots/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/sales/{saleId}/snapshots/{id}/flip", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/systematic/channels/{channelCode}/categories", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}/invert", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/systematic/channels/hierarchical", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/systematic/channels/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/systematic/channels/{code}/get", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/sellers/deliveries", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/deliveries/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "post", + "path": "/shoppings/sellers/coupons", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/sellers/coupons", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/coupons/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/sellers/orders", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/orders/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "post", + "path": "/shoppings/sellers/sales", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/sales/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/snapshots", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/sales/{saleId}/snapshots/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/sales/{saleId}/snapshots/{id}/flip", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/sellers/systematic/channels/{channelCode}/categories", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}/invert", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/sellers/systematic/channels/hierarchical", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/systematic/channels/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/systematic/channels/{code}/get", + "messages": [ + "Failed to escape $ref" + ] + } + ], + "options": { + "keyword": true, + "separate": null + } +} \ No newline at end of file diff --git a/examples/keyword/toss.json b/examples/keyword/toss.json new file mode 100644 index 0000000..d751c9e --- /dev/null +++ b/examples/keyword/toss.json @@ -0,0 +1,10748 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "post", + "path": "/v1/billing/authorizations/card", + "name": "v1_billing_authorizations_card_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "cardNumber": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "cardExpirationYear": { + "description": "카드 만료 년도 (2 자리).", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{2}" + }, + "cardExpirationMonth": { + "description": "카드 만료 월 (2 자리).", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^(0[1-9]|1[012])$" + }, + "cardPassword": { + "description": "카드 비밀번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerBirthday": { + "description": "고객의 생년월일.\n\n표기 형식 YYMMDD.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "consumerName": { + "description": "고객의 이름.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customerEmail": { + "description": "고객의 이메일.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "vbv": { + "type": "object", + "properties": { + "cavv": { + "description": "3D Secure 인증 세션에 대한 인증 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "xid": { + "description": "트랜잭션 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "eci": { + "description": "3DS 인증 결과에 대한 코드 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "cavv", + "xid", + "eci" + ], + "x-typia-jsDocTags": [] + }, + "customerKey": { + "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "cardNumber", + "cardExpirationYear", + "cardExpirationMonth", + "cardPassword", + "customerBirthday", + "customerKey" + ], + "description": "간편 결제 카드 등록 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "billingKey": { + "description": "{@link ITossBilling } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardCompany": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "cardNumber": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "authenticatedAt": { + "description": "인증 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "customerKey": { + "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "mId", + "billingKey", + "method", + "cardCompany", + "cardNumber", + "authenticatedAt", + "customerKey" + ], + "description": "간편 결제 등록 수단 정보.\n\n`ITossBilling` 은 간편 결제 등록 수단을 형상화한 자료구조 인터페이스로써, 고객이 자신의\n신용 카드를 서버에 등록해두고, 매번 결제가 필요할 때마다 카드 정보를 반복 입려하는 일\n없이 간편하게 결제를 진행하고자 할 때 사용한다.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "간편 결제 카드 등록하기.\n\n`billing.authorizations.card.store` 는 고객이 자신의 신록 카드를 서버에 등록해두고,\n매번 결제가 필요할 때마다 카드 정보를 반복 입력하는 일 없이 간편하게 결제를\n진행하고자 할 때, 호출되는 API 함수이다.\n\n참고로 `billing.authorizations.card.store` 는 클라이언트 어플리케이션이 토스\n페이먼츠가 제공하는 간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를\n실 서비스에서 호출하는 일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는\n상황을 시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다." + }, + { + "method": "post", + "path": "/v1/billing/authorizations/{billingKey}", + "name": "v1_billing_authorizations_postByBillingkey", + "parameters": [ + { + "type": "object", + "properties": { + "billingKey": { + "type": "string", + "description": "대상 정보의 " + }, + "body": { + "type": "object", + "properties": { + "customerKey": { + "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "customerKey" + ], + "description": "고객 식별자 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "billingKey": { + "description": "{@link ITossBilling } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardCompany": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "cardNumber": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "authenticatedAt": { + "description": "인증 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "customerKey": { + "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "mId", + "billingKey", + "method", + "cardCompany", + "cardNumber", + "authenticatedAt", + "customerKey" + ], + "description": "간편 결제 등록 수단 정보.\n\n`ITossBilling` 은 간편 결제 등록 수단을 형상화한 자료구조 인터페이스로써, 고객이 자신의\n신용 카드를 서버에 등록해두고, 매번 결제가 필요할 때마다 카드 정보를 반복 입려하는 일\n없이 간편하게 결제를 진행하고자 할 때 사용한다.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "간편 결제로 등록한 수단 조회하기.\n\n`billing.authorizations.at` 은 고객이 간편 결제를 위하여 토스 페이먼츠 서버에\n등록한 결제 수단을 조회하는 함수이다.\n\n주로 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로 제공하는 결제 창을 사용하는\n경우, 그래서 프론트 어플리케이션이 귀하의 백엔드 서버에 `billingKey` 와` customerKey`\n만을 전달해주어, 상세 간편 결제 수단 정보가 필요할 때 사용한다." + }, + { + "method": "post", + "path": "/v1/billing/{billingKey}", + "name": "v1_billing_postByBillingkey", + "parameters": [ + { + "type": "object", + "properties": { + "billingKey": { + "type": "string", + "description": "간편 결제에 등록한 수단의 " + }, + "body": { + "type": "object", + "properties": { + "method": { + "type": "string", + "enum": [ + "billing" + ], + "description": "결제 수단이 간편 결제임을 의미함.", + "x-typia-required": true, + "x-typia-optional": false + }, + "billingKey": { + "description": "{@link IPaymentStore } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "customerKey": { + "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "method", + "billingKey", + "orderId", + "amount", + "customerKey" + ], + "description": "간편 결제를 이용한 결제 신청 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "oneOf": [ + { + "type": "object", + "properties": { + "card": { + "type": "object", + "properties": { + "company": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "installmentPlanMonths": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "isInterestFree": { + "type": "boolean", + "description": "무이자 할부 적용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "useCardPoint": { + "type": "boolean", + "description": "카드 포인트 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardType": { + "type": "string", + "enum": [ + "신용", + "체크", + "기프트" + ], + "description": "카드 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "ownerType": { + "type": "string", + "enum": [ + "개인", + "법인" + ], + "description": "카드의 소유자 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "acquireStatus": { + "type": "string", + "enum": [ + "READY", + "CANCELED", + "REQUESTED", + "COMPLETED", + "CANCEL_REQUESTED" + ], + "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨", + "x-typia-required": true, + "x-typia-optional": false + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "company", + "number", + "installmentPlanMonths", + "isInterestFree", + "approveNo", + "useCardPoint", + "cardType", + "ownerType", + "acquireStatus", + "receiptUrl" + ], + "description": "카드 정보.", + "x-typia-jsDocTags": [] + }, + "discount": { + "type": "object", + "properties": { + "amount": { + "description": "카드사의 즉시 할인 프로모션을 적용한 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "nullable": true, + "required": [ + "amount" + ], + "description": "카드사의 즉시 할인 프로모션 정보.", + "x-typia-jsDocTags": [] + }, + "easyPay": { + "type": "string", + "enum": [ + "토스결제", + "페이코", + "삼성페이" + ], + "nullable": true, + "description": "간편결제로 결제한 경우 간편결제 타입 정보.", + "x-typia-required": true, + "x-typia-optional": false + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL", + "BILLING" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "card", + "discount", + "easyPay", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "giftCertificate": { + "type": "object", + "properties": { + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETE", + "INCOMPLETE" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "approveNo", + "settlementStatus" + ], + "description": "상품권 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "상품권" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "giftCertificate", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "상품권 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "mobilePhone": { + "type": "object", + "properties": { + "carrier": { + "description": "통신사.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerMobilePhone": { + "description": "고객 휴대폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "carrier", + "customerMobilePhone", + "settlementStatus" + ], + "description": "휴대폰 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "휴대폰" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "mobilePhone", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "휴대폰 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "transfer": { + "type": "object", + "properties": { + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "이체 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "bank", + "settlementStatus" + ], + "description": "계좌 이체 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "계좌이체" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "transfer", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "secret": { + "description": "가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "virtualAccount": { + "type": "object", + "properties": { + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountType": { + "type": "string", + "enum": [ + "일반", + "고정" + ], + "description": "가상 계좌 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "dueDate": { + "description": "입금 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date" + }, + "expired": { + "type": "boolean", + "description": "가상 계좌 만료 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + }, + "refundStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "NONE", + "FAILED", + "PENDING", + "PARTIAL_FAILED" + ], + "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "accountNumber", + "accountType", + "bank", + "customerName", + "dueDate", + "expired", + "settlementStatus", + "refundStatus" + ], + "description": "가상 계좌 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "가상계좌" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "secret", + "virtualAccount", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + ], + "description": "결제 정보.\n\n`ITossPayment` 는 토스 페이먼츠의 결제 정보를 형상화한 자료구조이자 유니언 타입의 \n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.method === \"카드\")\n payment.card; // payment be ITossCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "간편 결제에 등록한 수단으로 결제하기.\n\n`billing.pay` 는 간편 결제에 등록한 수단으로 결제를 진행하고자 할 때 호출하는 API\n함수이다.\n\n그리고 `billing.pay` 는 결제 수단 중 유일하게, 클라이언트 어플리케이션이 토스\n페이먼츠가 제공하는 결제 창을 사용할 수 없어, 귀하의 백엔드 서버가 토스 페이먼츠의\nAPI 함수를 직접 호출해야 하는 경우에 해당한다. 따라서 간편 결제에 관련하여 토스\n페이먼츠와 연동하는 백엔드 서버 및 프론트 어플리케이션을 개발할 때, 반드시 이 상황에\n대한 별도의 설계 및 개발이 필요하니, 이 점을 염두에 두기 바란다.\n\n더하여 `billing.pay` 는 철저히 귀사 백엔드 서버의 판단 아래 호출되는 API 함수인지라,\n이를 통하여 이루어지는 결제는 일절 {@link payments.approve } 가 필요 없다. 다만\n`billing.pay` 는 이처럼 부차적인 승인 과정 필요없이 그 즉시로 결제가 완성되니, 이를\n호출하는 상황에 대하여 세심히 주의를 기울일 필요가 있다" + }, + { + "method": "post", + "path": "/v1/cash-receipts", + "name": "v1_cash_receipts_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류.", + "x-typia-required": true, + "x-typia-optional": false + }, + "paymentKey": { + "description": "귀속 결제의 {@link ITossPayment.paymentKey }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문의 식별자 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "registrationNumber": { + "description": "현금 영수증 발급을 위한 개인 식별 번호.\n\n현금 영수증의 종류에 따라 휴대폰 번호나 주민등록번호 또는 사업자등록번호 및 \n카드 번호를 입력할 수 있다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "현금 영수증을 발행할 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 금액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "businessNumber": { + "description": "사업자 등록번호.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "required": [ + "type", + "paymentKey", + "orderId", + "orderName", + "registrationNumber", + "amount" + ], + "description": "현금 영수증 입력 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "receiptKey": { + "description": "현금 영수증의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "orderId": { + "description": "주문의 식별자 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "approvalNumber": { + "description": "현금 영수증 승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "approvedAt": { + "description": "현금 영수증 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "canceledAt": { + "description": "현금 영수증 취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "receiptKey", + "type", + "orderId", + "orderName", + "approvalNumber", + "approvedAt", + "canceledAt", + "receiptUrl" + ], + "description": "현금 영수증 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "현금 영수증 발행하기." + }, + { + "method": "post", + "path": "/v1/cash-receipts/{receiptKey}/cancel", + "name": "v1_cash_receipts_cancel_postByReceiptkey", + "parameters": [ + { + "type": "object", + "properties": { + "receiptKey": { + "type": "string", + "description": "현금 영수증의 " + }, + "body": { + "type": "object", + "properties": { + "amount": { + "description": "취소 금액.\n\n미 입력시 현금 영수증에 기재된 {@link ITossCashReceipt.amount 총액}이 취소됨.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + } + }, + "description": "현금 영수증 취소 입력 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "receiptKey": { + "description": "현금 영수증의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "orderId": { + "description": "주문의 식별자 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "approvalNumber": { + "description": "현금 영수증 승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "approvedAt": { + "description": "현금 영수증 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "canceledAt": { + "description": "현금 영수증 취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "receiptKey", + "type", + "orderId", + "orderName", + "approvalNumber", + "approvedAt", + "canceledAt", + "receiptUrl" + ], + "description": "현금 영수증 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "현금 영수증 취소하기." + }, + { + "method": "post", + "path": "/internal/webhook", + "name": "internal_webhook_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "eventType": { + "type": "string", + "enum": [ + "PAYMENT_STATUS_CHANGED" + ], + "description": "이벤트 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "data": { + "type": "object", + "properties": { + "paymentKey": { + "description": "{@link ITossPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED" + ], + "description": "결제 상태.\n\n - DONE: 결제 완료\n - CANCELED: 결제가 취소됨\n - PARTIAL_CANCELED: 결제가 부분 취소됨\n - WAITING_FOR_DEPOSIT: 입금 대기 중", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "paymentKey", + "orderId", + "status" + ], + "description": "웹훅 이벤트 데이터.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "eventType", + "data" + ], + "description": "웹훅 이벤트 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + } + ], + "description": "웹훅 이벤트 더미 리스너.\n\n`internal.webhook` 은 실제 토스 페이먼츠의 결제 서버에는 존재하지 않는 API 로써,\n`fake-toss-payments-server` 의 {@link Configuration.WEBHOOK_URL } 에 아무런 URL 을\n설정하지 않으면, `fake-toss-payments-server` 로부터 발생하는 모든 종류의 웹훅\n이벤트는 이 곳으로 전달되어 무의미하게 사라진다.\n\n따라서 `fake-toss-payments-server` 를 사용하여 토스 페이먼츠 서버와의 연동을 미리\n검증코자 할 때는, 반드시 {@link Configuration.WEBHOOK_URL } 를 설정하여 웹훅\n이벤트가 귀하의 백엔드 서버로 제대로 전달되도록 하자." + }, + { + "method": "get", + "path": "/internal/{paymentKey}/deposit", + "name": "internal_deposit_getByPaymentkey", + "parameters": [ + { + "type": "object", + "properties": { + "paymentKey": { + "type": "string", + "description": "대상 가상 계좌 결제 정보의 " + } + } + } + ], + "output": { + "oneOf": [ + { + "type": "object", + "properties": { + "card": { + "type": "object", + "properties": { + "company": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "installmentPlanMonths": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "isInterestFree": { + "type": "boolean", + "description": "무이자 할부 적용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "useCardPoint": { + "type": "boolean", + "description": "카드 포인트 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardType": { + "type": "string", + "enum": [ + "신용", + "체크", + "기프트" + ], + "description": "카드 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "ownerType": { + "type": "string", + "enum": [ + "개인", + "법인" + ], + "description": "카드의 소유자 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "acquireStatus": { + "type": "string", + "enum": [ + "READY", + "CANCELED", + "REQUESTED", + "COMPLETED", + "CANCEL_REQUESTED" + ], + "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨", + "x-typia-required": true, + "x-typia-optional": false + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "company", + "number", + "installmentPlanMonths", + "isInterestFree", + "approveNo", + "useCardPoint", + "cardType", + "ownerType", + "acquireStatus", + "receiptUrl" + ], + "description": "카드 정보.", + "x-typia-jsDocTags": [] + }, + "discount": { + "type": "object", + "properties": { + "amount": { + "description": "카드사의 즉시 할인 프로모션을 적용한 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "nullable": true, + "required": [ + "amount" + ], + "description": "카드사의 즉시 할인 프로모션 정보.", + "x-typia-jsDocTags": [] + }, + "easyPay": { + "type": "string", + "enum": [ + "토스결제", + "페이코", + "삼성페이" + ], + "nullable": true, + "description": "간편결제로 결제한 경우 간편결제 타입 정보.", + "x-typia-required": true, + "x-typia-optional": false + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL", + "BILLING" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "card", + "discount", + "easyPay", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "giftCertificate": { + "type": "object", + "properties": { + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETE", + "INCOMPLETE" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "approveNo", + "settlementStatus" + ], + "description": "상품권 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "상품권" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "giftCertificate", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "상품권 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "mobilePhone": { + "type": "object", + "properties": { + "carrier": { + "description": "통신사.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerMobilePhone": { + "description": "고객 휴대폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "carrier", + "customerMobilePhone", + "settlementStatus" + ], + "description": "휴대폰 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "휴대폰" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "mobilePhone", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "휴대폰 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "transfer": { + "type": "object", + "properties": { + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "이체 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "bank", + "settlementStatus" + ], + "description": "계좌 이체 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "계좌이체" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "transfer", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "secret": { + "description": "가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "virtualAccount": { + "type": "object", + "properties": { + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountType": { + "type": "string", + "enum": [ + "일반", + "고정" + ], + "description": "가상 계좌 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "dueDate": { + "description": "입금 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date" + }, + "expired": { + "type": "boolean", + "description": "가상 계좌 만료 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + }, + "refundStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "NONE", + "FAILED", + "PENDING", + "PARTIAL_FAILED" + ], + "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "accountNumber", + "accountType", + "bank", + "customerName", + "dueDate", + "expired", + "settlementStatus", + "refundStatus" + ], + "description": "가상 계좌 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "가상계좌" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "secret", + "virtualAccount", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + ], + "description": "결제 정보.\n\n`ITossPayment` 는 토스 페이먼츠의 결제 정보를 형상화한 자료구조이자 유니언 타입의 \n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.method === \"카드\")\n payment.card; // payment be ITossCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "가상 계좌에 입금하기.\n\n`internal.virtual_accounts.deposit` 은 실제 토스 페이먼츠의 결제 서버에는 존재하지\n않는 API 로써, 가상 계좌 결제를 신청한 고객이, 이후 가상 계좌에 목표 금액을 입금하는\n상황을 시뮬레이션할 수 있는 함수이다.\n\n즉 `internal.virtual_accounts.deposit` 는 고객이 스스로에게 가상으로 발급된 계좌에\n입금을 하고, 그에 따라 토스 페이먼츠 서버에서 webhook 이벤트가 발생하여 이를 귀하의\n백엔드 서버로 전송하는 일련의 상황을 테스트하기 위한 함수인 셈이다." + }, + { + "method": "get", + "path": "/v1/payments/{paymentKey}", + "name": "v1_payments_getByPaymentkey", + "parameters": [ + { + "type": "object", + "properties": { + "paymentKey": { + "type": "string", + "description": "결제 정보의 " + } + } + } + ], + "output": { + "oneOf": [ + { + "type": "object", + "properties": { + "card": { + "type": "object", + "properties": { + "company": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "installmentPlanMonths": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "isInterestFree": { + "type": "boolean", + "description": "무이자 할부 적용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "useCardPoint": { + "type": "boolean", + "description": "카드 포인트 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardType": { + "type": "string", + "enum": [ + "신용", + "체크", + "기프트" + ], + "description": "카드 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "ownerType": { + "type": "string", + "enum": [ + "개인", + "법인" + ], + "description": "카드의 소유자 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "acquireStatus": { + "type": "string", + "enum": [ + "READY", + "CANCELED", + "REQUESTED", + "COMPLETED", + "CANCEL_REQUESTED" + ], + "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨", + "x-typia-required": true, + "x-typia-optional": false + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "company", + "number", + "installmentPlanMonths", + "isInterestFree", + "approveNo", + "useCardPoint", + "cardType", + "ownerType", + "acquireStatus", + "receiptUrl" + ], + "description": "카드 정보.", + "x-typia-jsDocTags": [] + }, + "discount": { + "type": "object", + "properties": { + "amount": { + "description": "카드사의 즉시 할인 프로모션을 적용한 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "nullable": true, + "required": [ + "amount" + ], + "description": "카드사의 즉시 할인 프로모션 정보.", + "x-typia-jsDocTags": [] + }, + "easyPay": { + "type": "string", + "enum": [ + "토스결제", + "페이코", + "삼성페이" + ], + "nullable": true, + "description": "간편결제로 결제한 경우 간편결제 타입 정보.", + "x-typia-required": true, + "x-typia-optional": false + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL", + "BILLING" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "card", + "discount", + "easyPay", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "giftCertificate": { + "type": "object", + "properties": { + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETE", + "INCOMPLETE" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "approveNo", + "settlementStatus" + ], + "description": "상품권 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "상품권" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "giftCertificate", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "상품권 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "mobilePhone": { + "type": "object", + "properties": { + "carrier": { + "description": "통신사.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerMobilePhone": { + "description": "고객 휴대폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "carrier", + "customerMobilePhone", + "settlementStatus" + ], + "description": "휴대폰 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "휴대폰" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "mobilePhone", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "휴대폰 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "transfer": { + "type": "object", + "properties": { + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "이체 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "bank", + "settlementStatus" + ], + "description": "계좌 이체 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "계좌이체" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "transfer", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "secret": { + "description": "가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "virtualAccount": { + "type": "object", + "properties": { + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountType": { + "type": "string", + "enum": [ + "일반", + "고정" + ], + "description": "가상 계좌 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "dueDate": { + "description": "입금 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date" + }, + "expired": { + "type": "boolean", + "description": "가상 계좌 만료 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + }, + "refundStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "NONE", + "FAILED", + "PENDING", + "PARTIAL_FAILED" + ], + "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "accountNumber", + "accountType", + "bank", + "customerName", + "dueDate", + "expired", + "settlementStatus", + "refundStatus" + ], + "description": "가상 계좌 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "가상계좌" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "secret", + "virtualAccount", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + ], + "description": "결제 정보.\n\n`ITossPayment` 는 토스 페이먼츠의 결제 정보를 형상화한 자료구조이자 유니언 타입의 \n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.method === \"카드\")\n payment.card; // payment be ITossCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "결제 정보 조회하기.\n\n`payments.at` 은 결제 정보를 조회하는 함수이다.\n\n주로 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로 제공하는 결제 창을 사용하는\n경우, 그래서 프론트 어플리케이션이 귀하의 백엔드 서버에 `paymentKey` 등 극히 일부의\n식별자 정보만을 전달해주어, 상세 결제 정보가 필요할 때 사용한다.\n\n참고로 토스 페이먼츠는 다른 결제 PG 사들과 다르게, 클라이언트 어플리케이션에서 토스\n페이먼츠의 결제 창을 이용하여 진행한 결제가 바로 확정되는 것은 아니다. 귀사의 백엔드\n서버가 현재의 `payments.at` 을 통하여 해당 결제 정보를 확인하고, {@link approve } 를\n호출하여 직접 승인하기 전까지, 해당 결제는 확정되지 않으니, 이 점에 유의하기 바란다." + }, + { + "method": "post", + "path": "/v1/payments/{paymentKey}", + "name": "v1_payments_postByPaymentkey", + "parameters": [ + { + "type": "object", + "properties": { + "paymentKey": { + "type": "string", + "description": "대상 결제의 " + }, + "body": { + "type": "object", + "properties": { + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "required": [ + "orderId", + "amount" + ], + "description": "결제 승인 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "oneOf": [ + { + "type": "object", + "properties": { + "card": { + "type": "object", + "properties": { + "company": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "installmentPlanMonths": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "isInterestFree": { + "type": "boolean", + "description": "무이자 할부 적용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "useCardPoint": { + "type": "boolean", + "description": "카드 포인트 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardType": { + "type": "string", + "enum": [ + "신용", + "체크", + "기프트" + ], + "description": "카드 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "ownerType": { + "type": "string", + "enum": [ + "개인", + "법인" + ], + "description": "카드의 소유자 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "acquireStatus": { + "type": "string", + "enum": [ + "READY", + "CANCELED", + "REQUESTED", + "COMPLETED", + "CANCEL_REQUESTED" + ], + "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨", + "x-typia-required": true, + "x-typia-optional": false + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "company", + "number", + "installmentPlanMonths", + "isInterestFree", + "approveNo", + "useCardPoint", + "cardType", + "ownerType", + "acquireStatus", + "receiptUrl" + ], + "description": "카드 정보.", + "x-typia-jsDocTags": [] + }, + "discount": { + "type": "object", + "properties": { + "amount": { + "description": "카드사의 즉시 할인 프로모션을 적용한 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "nullable": true, + "required": [ + "amount" + ], + "description": "카드사의 즉시 할인 프로모션 정보.", + "x-typia-jsDocTags": [] + }, + "easyPay": { + "type": "string", + "enum": [ + "토스결제", + "페이코", + "삼성페이" + ], + "nullable": true, + "description": "간편결제로 결제한 경우 간편결제 타입 정보.", + "x-typia-required": true, + "x-typia-optional": false + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL", + "BILLING" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "card", + "discount", + "easyPay", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "giftCertificate": { + "type": "object", + "properties": { + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETE", + "INCOMPLETE" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "approveNo", + "settlementStatus" + ], + "description": "상품권 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "상품권" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "giftCertificate", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "상품권 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "mobilePhone": { + "type": "object", + "properties": { + "carrier": { + "description": "통신사.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerMobilePhone": { + "description": "고객 휴대폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "carrier", + "customerMobilePhone", + "settlementStatus" + ], + "description": "휴대폰 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "휴대폰" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "mobilePhone", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "휴대폰 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "transfer": { + "type": "object", + "properties": { + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "이체 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "bank", + "settlementStatus" + ], + "description": "계좌 이체 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "계좌이체" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "transfer", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "secret": { + "description": "가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "virtualAccount": { + "type": "object", + "properties": { + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountType": { + "type": "string", + "enum": [ + "일반", + "고정" + ], + "description": "가상 계좌 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "dueDate": { + "description": "입금 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date" + }, + "expired": { + "type": "boolean", + "description": "가상 계좌 만료 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + }, + "refundStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "NONE", + "FAILED", + "PENDING", + "PARTIAL_FAILED" + ], + "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "accountNumber", + "accountType", + "bank", + "customerName", + "dueDate", + "expired", + "settlementStatus", + "refundStatus" + ], + "description": "가상 계좌 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "가상계좌" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "secret", + "virtualAccount", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + ], + "description": "결제 정보.\n\n`ITossPayment` 는 토스 페이먼츠의 결제 정보를 형상화한 자료구조이자 유니언 타입의 \n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.method === \"카드\")\n payment.card; // payment be ITossCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "결제 승인하기.\n\n토스 페이먼츠는 귀사의 백엔드에서 일어난 결제가 아닌 프론트 어플리케이션의 결제 창에서\n이루어진 결제의 경우, 해당 서비스으 백엔드 서버로부터 결제를 승인받기 전까지, 이를\n확정하지 않는다. `payments.approve` 는 바로 이러한 상황에서, 해당 결제를 승인해주는\n함수이다.\n\n만일 귀하가 `fake-toss-payments-server` 를 이용하여 결제를 시뮬레이션하는 경우라면,\n결제 관련 API 를 호출함에 있어 {@link ITossCardPayment.IStore.__approved } 내지\n{@link ITossVirtualAccountPayment.IStore.__approved } 를 `false` 로 함으로써, 별도\n승인이 필요한 이러한 상황을 시뮬레이션 할 수 있다." + }, + { + "method": "post", + "path": "/v1/payments/key-in", + "name": "v1_payments_key_in_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "method": { + "type": "string", + "enum": [ + "card" + ], + "description": "결제 수단이 신용 카드임을 의미.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardNumber": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "cardExpirationYear": { + "description": "카드 만료 년도 (2 자리).", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{2}" + }, + "cardExpirationMonth": { + "description": "카드 만료 월 (2 자리).", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^(0[1-9]|1[012])$" + }, + "cardPassword": { + "description": "카드 비밀번호.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "cardInstallmentPlan": { + "description": "할부 개월 수.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "amount": { + "description": "지불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세금 총액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customerBirthday": { + "description": "고객의 생년월일.\n\n표기 형식 YYMMDD.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "pattern": "^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "customerEmail": { + "description": "고객의 이메일.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "vbv": { + "type": "object", + "properties": { + "cavv": { + "description": "3D Secure 인증 세션에 대한 인증 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "xid": { + "description": "트랜잭션 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "eci": { + "description": "3DS 인증 결과에 대한 코드 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "cavv", + "xid", + "eci" + ], + "x-typia-jsDocTags": [] + }, + "__approved": { + "type": "boolean", + "description": "결제 승인 여부.\n\n오직 가짜 페이먼츠 서버 `fake-toss-payments-server` 에서만 사용되는 값으로써, \n결제 승인을 고의로 지연시키거나 할 때 사용된다. 이 값을 `false` 로 하면, 프론트 \n어플리케이션이 토스 페이먼츠가 제공해주는 결제 창을 사용하여 결제를 진행하는 \n상황을 시뮬레이션할 수 있다.\n\n본디 토스 페이먼츠 서버는 프론트 어플리케이션에서 백엔드 서버를 거치지 않고,\n토스 페이먼츠가 제공해주는 결제 창을 이용하여 직접 결제를 요청하는 경우, \n백엔드에서 이를 별도 {@link functional.payments.approve 승인} 처리해주기 전까지 \n정식 결제로 인청치 아니한다.\n\n반면 백엔드 서버에서 토스 페이먼츠 서버의 API 를 호출하는 경우, 토스 페이먼츠는\n이를 그 즉시로 승인해주기, `fake-toss-payments-server` 에서 별도의 승인 처리가\n필요한 상황을 시뮬레이션하기 위해서는 이러한 속성이 필요한 것.", + "x-typia-required": false, + "x-typia-optional": true + } + }, + "required": [ + "method", + "cardNumber", + "cardExpirationYear", + "cardExpirationMonth", + "amount", + "orderId" + ], + "description": "신용 카드를 이용한 결제 신청 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "card": { + "type": "object", + "properties": { + "company": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "installmentPlanMonths": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "isInterestFree": { + "type": "boolean", + "description": "무이자 할부 적용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "useCardPoint": { + "type": "boolean", + "description": "카드 포인트 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardType": { + "type": "string", + "enum": [ + "신용", + "체크", + "기프트" + ], + "description": "카드 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "ownerType": { + "type": "string", + "enum": [ + "개인", + "법인" + ], + "description": "카드의 소유자 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "acquireStatus": { + "type": "string", + "enum": [ + "READY", + "CANCELED", + "REQUESTED", + "COMPLETED", + "CANCEL_REQUESTED" + ], + "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨", + "x-typia-required": true, + "x-typia-optional": false + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "company", + "number", + "installmentPlanMonths", + "isInterestFree", + "approveNo", + "useCardPoint", + "cardType", + "ownerType", + "acquireStatus", + "receiptUrl" + ], + "description": "카드 정보.", + "x-typia-jsDocTags": [] + }, + "discount": { + "type": "object", + "properties": { + "amount": { + "description": "카드사의 즉시 할인 프로모션을 적용한 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "nullable": true, + "required": [ + "amount" + ], + "description": "카드사의 즉시 할인 프로모션 정보.", + "x-typia-jsDocTags": [] + }, + "easyPay": { + "type": "string", + "enum": [ + "토스결제", + "페이코", + "삼성페이" + ], + "nullable": true, + "description": "간편결제로 결제한 경우 간편결제 타입 정보.", + "x-typia-required": true, + "x-typia-optional": false + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL", + "BILLING" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "card", + "discount", + "easyPay", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "카드로 결제하기.\n\n`payments.key_in` 은 카드를 이용한 결제를 할 때 호출되는 API 함수이다.\n\n참고로 `payments.key_in` 는 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로\n제공하는 결제 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는\n일은 없을 것이다. 다만, 고객이 카드를 통하여 결제하는 상황을 시뮬레이션하기 위하여,\n테스트 자동화 프로그램 수준에서 사용될 수는 있다.\n\n그리고 귀하의 백엔드 서버가 `payments.key-in` 을 직접 호출하는 경우, 토스 페이먼츠\n서버는 이를 완전히 승인된 결제로 보고 바로 확정한다. 때문에 `payments.key-in` 을\n직접 호출하는 경우, 토스 페이먼츠의 결제 창을 이용하여 별도의 {@link approve } 가\n필요한 때 대비, 훨씬 더 세심한 주의가 요구된다.\n\n더하여 만약 귀하의 백엔드 서버가 `fake-toss-payments-server` 를 이용하여 고객의\n카드 결제를 시뮬레이션하는 경우, {@link ITossCardPayment.IStore.__approved } 값을\n`false` 로 하여 카드 결제의 확정을 고의로 회피할 수 있다. 이를 통하여 토스\n페이먼츠의 결제 창을 이용한 카드 결제의 경우, 별도의 {@link approve } 가 필요한\n상황을 시뮬레이션 할 수 있다." + }, + { + "method": "post", + "path": "/v1/payments/{paymentKey}/cancel", + "name": "v1_payments_cancel_postByPaymentkey", + "parameters": [ + { + "type": "object", + "properties": { + "paymentKey": { + "type": "string", + "description": "결제 정보의 " + }, + "body": { + "type": "object", + "properties": { + "paymentKey": { + "description": "{@link ITossPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "refundReceiveAccount": { + "type": "object", + "properties": { + "bank": { + "description": "은행 정보.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^[0-9]{0,20}$" + }, + "holderName": { + "description": "예금주.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "bank", + "accountNumber", + "holderName" + ], + "x-typia-jsDocTags": [] + }, + "taxAmount": { + "description": "과세 처리 금액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리 금액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + } + }, + "required": [ + "paymentKey", + "cancelReason" + ], + "description": "결제 취소 신청 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "oneOf": [ + { + "type": "object", + "properties": { + "card": { + "type": "object", + "properties": { + "company": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "installmentPlanMonths": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "isInterestFree": { + "type": "boolean", + "description": "무이자 할부 적용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "useCardPoint": { + "type": "boolean", + "description": "카드 포인트 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardType": { + "type": "string", + "enum": [ + "신용", + "체크", + "기프트" + ], + "description": "카드 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "ownerType": { + "type": "string", + "enum": [ + "개인", + "법인" + ], + "description": "카드의 소유자 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "acquireStatus": { + "type": "string", + "enum": [ + "READY", + "CANCELED", + "REQUESTED", + "COMPLETED", + "CANCEL_REQUESTED" + ], + "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨", + "x-typia-required": true, + "x-typia-optional": false + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "company", + "number", + "installmentPlanMonths", + "isInterestFree", + "approveNo", + "useCardPoint", + "cardType", + "ownerType", + "acquireStatus", + "receiptUrl" + ], + "description": "카드 정보.", + "x-typia-jsDocTags": [] + }, + "discount": { + "type": "object", + "properties": { + "amount": { + "description": "카드사의 즉시 할인 프로모션을 적용한 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "nullable": true, + "required": [ + "amount" + ], + "description": "카드사의 즉시 할인 프로모션 정보.", + "x-typia-jsDocTags": [] + }, + "easyPay": { + "type": "string", + "enum": [ + "토스결제", + "페이코", + "삼성페이" + ], + "nullable": true, + "description": "간편결제로 결제한 경우 간편결제 타입 정보.", + "x-typia-required": true, + "x-typia-optional": false + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL", + "BILLING" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "card", + "discount", + "easyPay", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "giftCertificate": { + "type": "object", + "properties": { + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETE", + "INCOMPLETE" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "approveNo", + "settlementStatus" + ], + "description": "상품권 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "상품권" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "giftCertificate", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "상품권 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "mobilePhone": { + "type": "object", + "properties": { + "carrier": { + "description": "통신사.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerMobilePhone": { + "description": "고객 휴대폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "carrier", + "customerMobilePhone", + "settlementStatus" + ], + "description": "휴대폰 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "휴대폰" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "mobilePhone", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "휴대폰 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "transfer": { + "type": "object", + "properties": { + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "이체 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "bank", + "settlementStatus" + ], + "description": "계좌 이체 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "계좌이체" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "transfer", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "secret": { + "description": "가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "virtualAccount": { + "type": "object", + "properties": { + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountType": { + "type": "string", + "enum": [ + "일반", + "고정" + ], + "description": "가상 계좌 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "dueDate": { + "description": "입금 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date" + }, + "expired": { + "type": "boolean", + "description": "가상 계좌 만료 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + }, + "refundStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "NONE", + "FAILED", + "PENDING", + "PARTIAL_FAILED" + ], + "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "accountNumber", + "accountType", + "bank", + "customerName", + "dueDate", + "expired", + "settlementStatus", + "refundStatus" + ], + "description": "가상 계좌 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "가상계좌" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "secret", + "virtualAccount", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + ], + "description": "결제 정보.\n\n`ITossPayment` 는 토스 페이먼츠의 결제 정보를 형상화한 자료구조이자 유니언 타입의 \n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.method === \"카드\")\n payment.card; // payment be ITossCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "결제 취소하기.\n\n`payments.cancel` 은 결제를 취소하는 API 이다.\n\n결제 취소 입력 정보 {@link ITossPaymentCancel.IStore } 에는 취소 사유를 비롯하여,\n고객에게 환불해 줄 금액과 부가세 및 필요시 환불 계좌 정보 등을 입력하게 되어있다." + }, + { + "method": "post", + "path": "/v1/virtual-accounts", + "name": "v1_virtual_accounts_post", + "parameters": [ + { + "type": "object", + "properties": { + "body": { + "type": "object", + "properties": { + "method": { + "type": "string", + "enum": [ + "virtual-account" + ], + "description": "결제 수단이 가상 계좌임을 의미.", + "x-typia-required": true, + "x-typia-optional": false + }, + "orderId": { + "description": "주문 식별자 번호.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "__approved": { + "type": "boolean", + "description": "결제 승인 여부.\n\n오직 가짜 페이먼츠 서버 `fake-toss-payments-server` 에서만 사용되는 값으로써, \n결제 승인을 고의로 지연시키거나 할 때 사용된다. 이 값을 `false` 로 하면, 프론트 \n어플리케이션이 토스 페이먼츠가 제공해주는 결제 창을 사용하여 결제를 진행하는 \n상황을 시뮬레이션할 수 있다.\n\n본디 토스 페이먼츠 서버는 프론트 어플리케이션에서 백엔드 서버를 거치지 않고,\n토스 페이먼츠가 제공해주는 결제 창을 이용하여 직접 결제를 요청하는 경우, \n백엔드에서 이를 별도 {@link functional.payments.approve 승인} 처리해주기 전까지 \n정식 결제로 인청치 아니한다.\n\n반면 백엔드 서버에서 토스 페이먼츠 서버의 API 를 호출하는 경우, 토스 페이먼츠는\n이를 그 즉시로 승인해주기, `fake-toss-payments-server` 에서 별도의 승인 처리가\n필요한 상황을 시뮬레이션하기 위해서는 이러한 속성이 필요한 것.", + "x-typia-required": false, + "x-typia-optional": true + } + }, + "required": [ + "method", + "orderId", + "orderName", + "bank", + "customerName", + "amount" + ], + "description": "가상 계좌를 이용한 결제 신청 정보.", + "x-typia-jsDocTags": [] + } + } + } + ], + "output": { + "type": "object", + "properties": { + "secret": { + "description": "가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "virtualAccount": { + "type": "object", + "properties": { + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountType": { + "type": "string", + "enum": [ + "일반", + "고정" + ], + "description": "가상 계좌 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "dueDate": { + "description": "입금 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date" + }, + "expired": { + "type": "boolean", + "description": "가상 계좌 만료 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + }, + "refundStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "NONE", + "FAILED", + "PENDING", + "PARTIAL_FAILED" + ], + "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "accountNumber", + "accountType", + "bank", + "customerName", + "dueDate", + "expired", + "settlementStatus", + "refundStatus" + ], + "description": "가상 계좌 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "가상계좌" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "secret", + "virtualAccount", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "가상 계좌로 결제 신청하기.\n\n`virtual_accounts.store` 는 고객이 결제 수단을 가상 계좌로 선택하는 경우에 호출되는\nAPI 함수이다. 물론 고객이 이처럼 가상 계좌를 선택한 경우, 고객이 지정된 계좌에 돈을\n입금하기 전까지는 결제가 마무리된 것이 아니기에, {@link ITossPayment.status } 값은\n`WAITING_FOR_DEPOSIT` 이 된다.\n\n참고로 `virtual_accounts.store` 는 클라이언트 어플리케이션이 토스 페이먼츠가\n자체적으로 제공하는 결제 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서\n호출하는 일은 없을 것이다. 다만, 고객이 가상 계좌로 결제를 진행하는 상황을\n시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다.\n\n그리고 `virtual_accounts.store` 이후에 고객이 지정된 계좌에 금액을 입금하거든, 토스\n페이먼츠 서버로부터 웹훅 이벤트가 발생되어 귀하의 백엔드 서버로 전송된다. 만약 연동\n대상 토스 페이먼츠 서버가 실제가 아닌 `fake-toss-payments-server` 라면,\n{@link internal.virtual_accounts.deposit } 를 호출하여, 고객이 가상 계좌에 입금하는\n상황을 시뮬레이션 할 수 있다." + } + ], + "errors": [], + "options": { + "keyword": true, + "separate": null + } +} \ No newline at end of file diff --git a/examples/keyword/uber.json b/examples/keyword/uber.json new file mode 100644 index 0000000..bcf28a2 --- /dev/null +++ b/examples/keyword/uber.json @@ -0,0 +1,219 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "get", + "path": "/products", + "name": "products_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "latitude": { + "name": "latitude", + "in": "query", + "description": "Latitude component of location.", + "required": true, + "type": "number", + "format": "double" + }, + "longitude": { + "name": "longitude", + "in": "query", + "description": "Longitude component of location.", + "required": true, + "type": "number", + "format": "double" + } + }, + "required": [ + "latitude", + "longitude" + ] + } + } + } + ], + "output": { + "type": "array", + "items": {} + }, + "description": "Product Types.\n\nThe Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order." + }, + { + "method": "get", + "path": "/estimates/price", + "name": "estimates_price_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "start_latitude": { + "name": "start_latitude", + "in": "query", + "description": "Latitude component of start location.", + "required": true, + "type": "number", + "format": "double" + }, + "start_longitude": { + "name": "start_longitude", + "in": "query", + "description": "Longitude component of start location.", + "required": true, + "type": "number", + "format": "double" + }, + "end_latitude": { + "name": "end_latitude", + "in": "query", + "description": "Latitude component of end location.", + "required": true, + "type": "number", + "format": "double" + }, + "end_longitude": { + "name": "end_longitude", + "in": "query", + "description": "Longitude component of end location.", + "required": true, + "type": "number", + "format": "double" + } + }, + "required": [ + "start_latitude", + "start_longitude", + "end_latitude", + "end_longitude" + ] + } + } + } + ], + "output": { + "type": "array", + "items": {} + }, + "description": "Price Estimates.\n\nThe Price Estimates endpoint returns an estimated price range for each product offered at a given location. The price estimate is provided as a formatted string with the full price range and the localized currency symbol.

The response also includes low and high estimates, and the [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code for situations requiring currency conversion. When surge is active for a particular product, its surge_multiplier will be greater than 1, but the price estimate already factors in this multiplier." + }, + { + "method": "get", + "path": "/estimates/time", + "name": "estimates_time_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "start_latitude": { + "name": "start_latitude", + "in": "query", + "description": "Latitude component of start location.", + "required": true, + "type": "number", + "format": "double" + }, + "start_longitude": { + "name": "start_longitude", + "in": "query", + "description": "Longitude component of start location.", + "required": true, + "type": "number", + "format": "double" + }, + "customer_uuid": { + "name": "customer_uuid", + "in": "query", + "type": "string", + "format": "uuid", + "description": "Unique customer identifier to be used for experience customization." + }, + "product_id": { + "name": "product_id", + "in": "query", + "type": "string", + "description": "Unique identifier representing a specific product for a given latitude & longitude." + } + }, + "required": [ + "start_latitude", + "start_longitude", + "customer_uuid", + "product_id" + ] + } + } + } + ], + "output": { + "type": "array", + "items": {} + }, + "description": "Time Estimates.\n\nThe Time Estimates endpoint returns ETAs for all products offered at a given location, with the responses expressed as integers in seconds. We recommend that this endpoint be called every minute to provide the most accurate, up-to-date ETAs." + }, + { + "method": "get", + "path": "/me", + "name": "me_get", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": {}, + "description": "User Profile.\n\nThe User Profile endpoint returns information about the Uber user that has authorized with the application." + }, + { + "method": "get", + "path": "/history", + "name": "history_get", + "parameters": [ + { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "offset": { + "name": "offset", + "in": "query", + "type": "integer", + "format": "int32", + "description": "Offset the list of returned results by this amount. Default is zero." + }, + "limit": { + "name": "limit", + "in": "query", + "type": "integer", + "format": "int32", + "description": "Number of items to retrieve. Default is 5, maximum is 100." + } + }, + "required": [ + "offset", + "limit" + ] + } + } + } + ], + "output": {}, + "description": "User Activity.\n\nThe User Activity endpoint returns data about a user's lifetime activity with Uber. The response will include pickup locations and times, dropoff locations and times, the distance of past requests, and information about which products were requested.

The history array in the response will have a maximum length based on the limit parameter. The response value count may exceed limit, therefore subsequent API requests may be necessary." + } + ], + "errors": [], + "options": { + "keyword": true, + "separate": null + } +} \ No newline at end of file diff --git a/examples/positional/bbs.json b/examples/positional/bbs.json new file mode 100644 index 0000000..4412b88 --- /dev/null +++ b/examples/positional/bbs.json @@ -0,0 +1,1990 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "post", + "path": "/bbs/articles", + "name": "bbs_articles_post", + "parameters": [ + { + "type": "object", + "properties": { + "writer": { + "type": "string" + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "password": { + "type": "string", + "title": "Password for modification", + "description": "Password for modification." + } + }, + "required": [ + "writer", + "format", + "title", + "body", + "files", + "password" + ], + "description": "Store content type of the article." + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "writer": { + "type": "string", + "title": "Writer of article", + "description": "Writer of article." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files", + "title" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "id", + "writer", + "snapshots", + "created_at" + ], + "description": "Article entity.\n\n`IBbsArticle* is a super-type entity of all kinds of articles in the current\nbackend system, literally shaping individual articles of the bulletin board.\n\nAnd, as you can see, the elements that must inevitably exist in the article,\nsuch as the `title` or the `body`, do not exist in the `IBbsArticle`, but exist\nin the subsidiary entity, {@link IBbsArticle.ISnapshot }, as a 1: N relationship,\nwhich is because a new snapshot record is published every time the article is\nmodified.\n\nThe reason why a new snapshot record is published every time the article is\nmodified is to preserve the evidence. Due to the nature of e-community, there\nis always a threat of dispute among the participants. And it can happen that\ndisputes arise through articles or {@link IBbsArticleComment comments}, and to\nprevent such things as modifying existing articles to manipulate the situation,\nthe article is designed in this structure.\n\nIn other words, to keep evidence, and prevent fraud." + }, + "description": "Create a new article.\n\nCreate a new article with its first {@link IBbsArticle.ISnapshot snapshot}." + }, + { + "method": "patch", + "path": "/bbs/articles", + "name": "bbs_articles_patch", + "parameters": [ + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "writer": { + "type": "string" + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + }, + "description": "검색 정보." + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-writer", + "-title", + "-created_at", + "-updated_at", + "+writer", + "+title", + "+created_at", + "+updated_at" + ] + }, + "title": "Sort condition", + "description": "Sort condition." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "writer": { + "type": "string", + "title": "Writer of the article", + "description": "Writer of the article." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "id", + "writer", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the article." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up all summarized articles.\n\nList up all summarized articles with pagination and searching options." + }, + { + "method": "patch", + "path": "/bbs/articles/abridges", + "name": "bbs_articles_abridges_patch", + "parameters": [ + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "writer": { + "type": "string" + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + }, + "description": "검색 정보." + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-writer", + "-title", + "-created_at", + "-updated_at", + "+writer", + "+title", + "+created_at", + "+updated_at" + ] + }, + "title": "Sort condition", + "description": "Sort condition." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "writer": { + "type": "string", + "title": "Writer of the article", + "description": "Writer of the article." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "writer", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abriged information of the article." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up all abridged articles.\n\nList up all abridged articles with pagination and searching options." + }, + { + "method": "get", + "path": "/bbs/articles/{id}", + "name": "bbs_articles_getById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target article's " + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "writer": { + "type": "string", + "title": "Writer of article", + "description": "Writer of article." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files", + "title" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "id", + "writer", + "snapshots", + "created_at" + ], + "description": "Article entity.\n\n`IBbsArticle* is a super-type entity of all kinds of articles in the current\nbackend system, literally shaping individual articles of the bulletin board.\n\nAnd, as you can see, the elements that must inevitably exist in the article,\nsuch as the `title` or the `body`, do not exist in the `IBbsArticle`, but exist\nin the subsidiary entity, {@link IBbsArticle.ISnapshot }, as a 1: N relationship,\nwhich is because a new snapshot record is published every time the article is\nmodified.\n\nThe reason why a new snapshot record is published every time the article is\nmodified is to preserve the evidence. Due to the nature of e-community, there\nis always a threat of dispute among the participants. And it can happen that\ndisputes arise through articles or {@link IBbsArticleComment comments}, and to\nprevent such things as modifying existing articles to manipulate the situation,\nthe article is designed in this structure.\n\nIn other words, to keep evidence, and prevent fraud." + }, + "description": "Read individual article.\n\nReads an article with its every {@link IBbsArticle.ISnapshot snapshots}." + }, + { + "method": "put", + "path": "/bbs/articles/{id}", + "name": "bbs_articles_putById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target article's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "password": { + "type": "string", + "title": "Password for modification", + "description": "Password for modification." + } + }, + "required": [ + "format", + "title", + "body", + "files", + "password" + ] + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files", + "title" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "description": "Update an article.\n\nAccumulate a new {@link IBbsArticle.ISnapshot snapshot} record to the article." + }, + { + "method": "delete", + "path": "/bbs/articles/{id}", + "name": "bbs_articles_eraseById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target article's " + }, + { + "type": "object", + "properties": { + "password": { + "type": "string" + } + }, + "required": [ + "password" + ] + } + ], + "description": "Erase an article.\n\nPerforms soft deletion to the article." + }, + { + "method": "post", + "path": "/bbs/articles/{articleId}/comments", + "name": "bbs_articles_comments_postByArticleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged article's " + }, + { + "type": "object", + "properties": { + "writer": { + "type": "string", + "title": "Writer of comment", + "description": "Writer of comment." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "password": { + "type": "string", + "title": "Password for modification", + "description": "Password for modification." + } + }, + "required": [ + "writer", + "format", + "body", + "files", + "password" + ] + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "writer": { + "type": "string", + "title": "Writer of comment", + "description": "Writer of comment." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "id", + "parent_id", + "writer", + "snapshots", + "created_at" + ], + "description": "Comment written on an article.\n\n`IBbsArticleComment` is an entity that shapes the comments written on an article.\n\nAnd for this comment, as in the previous relationship between\n{@link IBbsArticle } and {@link IBbsArticle.ISnapshot }, the content body of the\ncomment is stored in the sub {@link IBbsArticleComment.ISnapshot } table for\nevidentialism, and a new snapshot record is issued every time the comment is modified.\n\nAlso, `IBbsArticleComment` is expressing the relationship of the hierarchical reply\nstructure through the {@link IBbsArticleComment.parent_id } attribute." + }, + "description": "Create a new comment.\n\nCreate a new comment with its first {@link IBbsArticleComment.ISnapshot snapshot}." + }, + { + "method": "patch", + "path": "/bbs/articles/{articleId}/comments", + "name": "bbs_articles_comments_patchByArticleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "" + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "writer": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-writer", + "-created_at", + "+writer", + "+created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "writer": { + "type": "string", + "title": "Writer of comment", + "description": "Writer of comment." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "id", + "parent_id", + "writer", + "snapshots", + "created_at" + ], + "description": "Comment written on an article.\n\n`IBbsArticleComment` is an entity that shapes the comments written on an article.\n\nAnd for this comment, as in the previous relationship between\n{@link IBbsArticle } and {@link IBbsArticle.ISnapshot }, the content body of the\ncomment is stored in the sub {@link IBbsArticleComment.ISnapshot } table for\nevidentialism, and a new snapshot record is issued every time the comment is modified.\n\nAlso, `IBbsArticleComment` is expressing the relationship of the hierarchical reply\nstructure through the {@link IBbsArticleComment.parent_id } attribute." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up all summarized comments.\n\nList up all summarized comments with pagination and searching options." + }, + { + "method": "get", + "path": "/bbs/articles/{articleId}/comments/{id}", + "name": "bbs_articles_comments_getByArticleidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged article's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target comment's " + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "writer": { + "type": "string", + "title": "Writer of comment", + "description": "Writer of comment." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "id", + "parent_id", + "writer", + "snapshots", + "created_at" + ], + "description": "Comment written on an article.\n\n`IBbsArticleComment` is an entity that shapes the comments written on an article.\n\nAnd for this comment, as in the previous relationship between\n{@link IBbsArticle } and {@link IBbsArticle.ISnapshot }, the content body of the\ncomment is stored in the sub {@link IBbsArticleComment.ISnapshot } table for\nevidentialism, and a new snapshot record is issued every time the comment is modified.\n\nAlso, `IBbsArticleComment` is expressing the relationship of the hierarchical reply\nstructure through the {@link IBbsArticleComment.parent_id } attribute." + }, + "description": "Read individual comment.\n\nReads a comment with its every {@link IBbsArticleComment.ISnapshot snapshots}." + }, + { + "method": "put", + "path": "/bbs/articles/{articleId}/comments/{id}", + "name": "bbs_articles_comments_putByArticleidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged article's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target comment's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "password": { + "type": "string", + "title": "Password for modification", + "description": "Password for modification." + } + }, + "required": [ + "format", + "body", + "files", + "password" + ] + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "txt", + "md", + "html" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "description": "Update a comment.\n\nAccumulate a new {@link IBbsArticleComment.ISnapshot snapshot} record to the comment." + }, + { + "method": "delete", + "path": "/bbs/articles/{articleId}/comments/{id}", + "name": "bbs_articles_comments_eraseByArticleidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged article's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target comment's " + }, + { + "type": "object", + "properties": { + "password": { + "type": "string" + } + }, + "required": [ + "password" + ] + } + ], + "description": "Erase a comment.\n\nPerforms soft deletion to the comment." + }, + { + "method": "get", + "path": "/monitors/health", + "name": "monitors_health_get", + "parameters": [], + "description": "Health check API." + }, + { + "method": "get", + "path": "/monitors/performance", + "name": "monitors_performance_get", + "parameters": [], + "output": { + "type": "object", + "properties": { + "cpu": { + "type": "object", + "properties": { + "user": { + "type": "number" + }, + "system": { + "type": "number" + } + }, + "required": [ + "user", + "system" + ] + }, + "memory": { + "type": "object", + "properties": { + "rss": { + "type": "number" + }, + "heapTotal": { + "type": "number" + }, + "heapUsed": { + "type": "number" + }, + "external": { + "type": "number" + }, + "arrayBuffers": { + "type": "number" + } + }, + "required": [ + "rss", + "heapTotal", + "heapUsed", + "external", + "arrayBuffers" + ] + }, + "resource": { + "type": "object", + "properties": { + "fsRead": { + "type": "number" + }, + "fsWrite": { + "type": "number" + }, + "involuntaryContextSwitches": { + "type": "number" + }, + "ipcReceived": { + "type": "number" + }, + "ipcSent": { + "type": "number" + }, + "majorPageFault": { + "type": "number" + }, + "maxRSS": { + "type": "number" + }, + "minorPageFault": { + "type": "number" + }, + "sharedMemorySize": { + "type": "number" + }, + "signalsCount": { + "type": "number" + }, + "swappedOut": { + "type": "number" + }, + "systemCPUTime": { + "type": "number" + }, + "unsharedDataSize": { + "type": "number" + }, + "unsharedStackSize": { + "type": "number" + }, + "userCPUTime": { + "type": "number" + }, + "voluntaryContextSwitches": { + "type": "number" + } + }, + "required": [ + "fsRead", + "fsWrite", + "involuntaryContextSwitches", + "ipcReceived", + "ipcSent", + "majorPageFault", + "maxRSS", + "minorPageFault", + "sharedMemorySize", + "signalsCount", + "swappedOut", + "systemCPUTime", + "unsharedDataSize", + "unsharedStackSize", + "userCPUTime", + "voluntaryContextSwitches" + ] + } + }, + "required": [ + "cpu", + "memory", + "resource" + ] + }, + "description": "Get performance information.\n\nGet perofmration information composed with CPU, memory and resource usage." + }, + { + "method": "get", + "path": "/monitors/system", + "name": "monitors_system_get", + "parameters": [], + "output": { + "type": "object", + "properties": { + "uid": { + "type": "number", + "title": "Random Unique ID", + "description": "Random Unique ID." + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "`process.argv`" + }, + "commit": { + "type": "object", + "properties": { + "shortHash": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "hash": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "sanitizedSubject": { + "type": "string" + }, + "body": { + "type": "string" + }, + "author": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "description": "Git user account info." + }, + "committer": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "description": "Git user account info." + }, + "authored_at": { + "type": "string" + }, + "commited_at": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shortHash", + "branch", + "hash", + "subject", + "sanitizedSubject", + "body", + "author", + "committer", + "authored_at", + "commited_at", + "tags" + ], + "description": "Git commit info." + }, + "package": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "description": { + "type": "string" + }, + "main": { + "type": "string" + }, + "typings": { + "type": "string" + }, + "scripts": { + "type": "object", + "properties": {}, + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } + }, + "repository": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "git" + ] + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ] + }, + "author": { + "type": "string" + }, + "license": { + "type": "string" + }, + "bugs": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + }, + "required": [ + "url" + ] + }, + "homepage": { + "type": "string" + }, + "devDependencies": { + "type": "object", + "properties": {}, + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } + }, + "dependencies": { + "type": "object", + "properties": {}, + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } + }, + "publishConfig": { + "type": "object", + "properties": { + "registry": { + "type": "string" + } + }, + "required": [ + "registry" + ] + }, + "files": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "version", + "description", + "scripts", + "repository", + "author", + "license", + "bugs", + "homepage", + "dependencies" + ], + "description": "NPM package info." + }, + "created_at": { + "type": "string", + "title": "Creation time of this server", + "description": "Creation time of this server." + } + }, + "required": [ + "uid", + "arguments", + "commit", + "package", + "created_at" + ], + "description": "System Information." + }, + "description": "Get system information.\n\nGet system information with commit and package information." + } + ], + "errors": [], + "options": { + "keyword": false, + "separate": null + } +} \ No newline at end of file diff --git a/examples/positional/clickhouse.json b/examples/positional/clickhouse.json new file mode 100644 index 0000000..bd52091 --- /dev/null +++ b/examples/positional/clickhouse.json @@ -0,0 +1,851 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "get", + "path": "/v1/organizations", + "name": "v1_organizations_get", + "parameters": [], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get list of available organizations.\n\nReturns a list with a single organization associated with the API key in the request." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId", + "name": "v1_organizations_getByOrganizationid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get organization details.\n\nReturns details of a single organization. In order to get the details, the auth key must belong to the organization." + }, + { + "method": "patch", + "path": "/v1/organizations/:organizationId", + "name": "v1_organizations_patchByOrganizationid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization to update." + }, + {} + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Update organization details.\n\nUpdates organization fields. Requires ADMIN auth key role." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/services", + "name": "v1_organizations_services_getByOrganizationid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "List of organization services.\n\nReturns a list of all services in the organization." + }, + { + "method": "post", + "path": "/v1/organizations/:organizationId/services", + "name": "v1_organizations_services_postByOrganizationid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization that will own the service." + }, + {} + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Create new service.\n\nCreates a new service in the organization, and returns the current service state and a password to access the service. The service is started asynchronously." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/services/:serviceId", + "name": "v1_organizations_services_getByOrganizationidAndServiceid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the service." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the requested service." + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get service details.\n\nReturns a service that belongs to the organization" + }, + { + "method": "patch", + "path": "/v1/organizations/:organizationId/services/:serviceId", + "name": "v1_organizations_services_patchByOrganizationidAndServiceid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the service." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the service to update." + }, + {} + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Update service basic details.\n\nUpdates basic service details like service name or IP access list." + }, + { + "method": "delete", + "path": "/v1/organizations/:organizationId/services/:serviceId", + "name": "v1_organizations_services_eraseByOrganizationidAndServiceid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the service." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the service to delete." + } + ], + "description": "Delete service.\n\nDeletes the service. The service must be in stopped state and is deleted asynchronously after this method call." + }, + { + "method": "patch", + "path": "/v1/organizations/:organizationId/services/:serviceId/state", + "name": "v1_organizations_services_state_patchByOrganizationidAndServiceid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the service." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the service to update state." + }, + {} + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Update service state.\n\nStarts or stop service" + }, + { + "method": "patch", + "path": "/v1/organizations/:organizationId/services/:serviceId/scaling", + "name": "v1_organizations_services_scaling_patchByOrganizationidAndServiceid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the service." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the service to update scaling parameters." + }, + {} + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Update service auto scaling settings.\n\nUpdates minimum and maximum total memory limits and idle mode scaling behavior for the service. The memory settings are available only for \"production\" services and must be a multiple of 12 starting from 24GB." + }, + { + "method": "patch", + "path": "/v1/organizations/:organizationId/services/:serviceId/password", + "name": "v1_organizations_services_password_patchByOrganizationidAndServiceid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the service." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the service to update password." + }, + {} + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Update service password.\n\nSets a new password for the service" + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/services/:serviceId/backups", + "name": "v1_organizations_services_backups_getByOrganizationidAndServiceid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the backup." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the service the backup was created from." + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "List of service backups.\n\nReturns a list of all backups for the service." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/services/:serviceId/backups/:backupId", + "name": "v1_organizations_services_backups_getByOrganizationidAndServiceidAndBackupid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the backup." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the service the backup was created from." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the requested backup." + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get backup details.\n\nReturns a single backup info." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/keys", + "name": "v1_organizations_keys_getByOrganizationid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get list of all keys.\n\nReturns a list of all keys in the organization." + }, + { + "method": "post", + "path": "/v1/organizations/:organizationId/keys", + "name": "v1_organizations_keys_postByOrganizationid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization that will own the key." + }, + {} + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Create key.\n\nCreates new API key." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/keys/:keyId", + "name": "v1_organizations_keys_getByOrganizationidAndKeyid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the requested key." + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get key details.\n\nReturns a single key details." + }, + { + "method": "patch", + "path": "/v1/organizations/:organizationId/keys/:keyId", + "name": "v1_organizations_keys_patchByOrganizationidAndKeyid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the key." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the key to update." + }, + {} + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Update key.\n\nUpdates API key properties." + }, + { + "method": "delete", + "path": "/v1/organizations/:organizationId/keys/:keyId", + "name": "v1_organizations_keys_eraseByOrganizationidAndKeyid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization that owns the key." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the key to delete." + } + ], + "description": "Delete key.\n\nDeletes API key. Only a key not used to authenticate the active request can be deleted." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/members", + "name": "v1_organizations_members_getByOrganizationid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "List organization members.\n\nReturns a list of all members in the organization." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/members/:userId", + "name": "v1_organizations_members_getByOrganizationidAndUserid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization the member is part of." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the requested user." + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get member details.\n\nReturns a single organization member details." + }, + { + "method": "patch", + "path": "/v1/organizations/:organizationId/members/:userId", + "name": "v1_organizations_members_patchByOrganizationidAndUserid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization the member is part of." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the user to patch" + }, + {} + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Update organization member.\n\nUpdates organization member role." + }, + { + "method": "delete", + "path": "/v1/organizations/:organizationId/members/:userId", + "name": "v1_organizations_members_eraseByOrganizationidAndUserid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the requested user." + } + ], + "description": "Remove an organization member.\n\nRemoves a user from the organization" + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/invitations", + "name": "v1_organizations_invitations_getByOrganizationid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "List all invitations.\n\nReturns list of all organization invitations." + }, + { + "method": "post", + "path": "/v1/organizations/:organizationId/invitations", + "name": "v1_organizations_invitations_postByOrganizationid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization to invite a user to." + }, + {} + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Create an invitation.\n\nCreates organization invitation." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/invitations/:invitationId", + "name": "v1_organizations_invitations_getByOrganizationidAndInvitationid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Get invitation details.\n\nReturns details for a single organization invitation." + }, + { + "method": "delete", + "path": "/v1/organizations/:organizationId/invitations/:invitationId", + "name": "v1_organizations_invitations_eraseByOrganizationidAndInvitationid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the organization that has the invitation." + }, + { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + ], + "description": "Delete organization invitation.\n\nDeletes a single organization invitation." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/activities", + "name": "v1_organizations_activities_getByOrganizationid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "List of organization activities.\n\nReturns a list of all organization activities." + }, + { + "method": "get", + "path": "/v1/organizations/:organizationId/activities/:activityId", + "name": "v1_organizations_activities_getByOrganizationidAndActivityid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "ID of the requested organization." + }, + { + "type": "string", + "description": "ID of the requested activity." + } + ], + "output": { + "type": "object", + "properties": { + "result": {}, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + }, + "description": "Organization activity.\n\nReturns a single organization activity by ID." + } + ], + "errors": [], + "options": { + "keyword": false, + "separate": null + } +} \ No newline at end of file diff --git a/examples/positional/fireblocks.json b/examples/positional/fireblocks.json new file mode 100644 index 0000000..57861e6 --- /dev/null +++ b/examples/positional/fireblocks.json @@ -0,0 +1,15394 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "get", + "path": "/vault/accounts", + "name": "vault_accounts_get", + "parameters": [ + { + "type": "object", + "properties": { + "namePrefix": { + "type": "string" + }, + "nameSuffix": { + "type": "string" + }, + "minAmountThreshold": { + "type": "number" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset" + } + }, + "required": [] + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + } + }, + "hiddenOnUI": { + "type": "boolean" + }, + "customerRefId": { + "type": "string" + }, + "autoFuel": { + "type": "boolean" + } + } + } + }, + "description": "List vault accounts.\n\nGets all vault accounts in your workspace." + }, + { + "method": "post", + "path": "/vault/accounts", + "name": "vault_accounts_post", + "parameters": [ + {} + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + } + }, + "hiddenOnUI": { + "type": "boolean" + }, + "customerRefId": { + "type": "string" + }, + "autoFuel": { + "type": "boolean" + } + } + }, + "description": "Create a new vault account.\n\nCreates a new vault account with the requested name." + }, + { + "method": "get", + "path": "/vault/accounts_paged", + "name": "vault_accounts_paged_get", + "parameters": [ + { + "type": "object", + "properties": { + "namePrefix": { + "type": "string" + }, + "nameSuffix": { + "type": "string" + }, + "minAmountThreshold": { + "type": "number" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset" + }, + "before": { + "type": "string" + }, + "after": { + "type": "string" + }, + "limit": { + "type": "number", + "minimum": 1, + "maximum": 500, + "default": 200 + } + }, + "required": [] + } + ], + "output": { + "type": "object", + "properties": { + "accounts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + } + }, + "hiddenOnUI": { + "type": "boolean" + }, + "customerRefId": { + "type": "string" + }, + "autoFuel": { + "type": "boolean" + } + } + } + }, + "paging": { + "type": "object", + "properties": { + "before": { + "type": "string" + }, + "after": { + "type": "string" + } + } + }, + "previousUrl": { + "type": "string" + }, + "nextUrl": { + "type": "string" + } + } + }, + "description": "List vault acounts (Paginated).\n\nGets all vault accounts in your workspace. This endpoint returns a limited amount of results with a quick response time." + }, + { + "method": "get", + "path": "/vault/accounts/{vaultAccountId}", + "name": "vault_accounts_getByVaultaccountid", + "parameters": [ + { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to return type: string" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + } + }, + "hiddenOnUI": { + "type": "boolean" + }, + "customerRefId": { + "type": "string" + }, + "autoFuel": { + "type": "boolean" + } + } + }, + "description": "Find a vault account by ID.\n\nReturns the requested vault account." + }, + { + "method": "put", + "path": "/vault/accounts/{vaultAccountId}", + "name": "vault_accounts_putByVaultaccountid", + "parameters": [ + { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to edit" + }, + {} + ], + "description": "Rename a vault account.\n\nRenames the requested vault account." + }, + { + "method": "get", + "path": "/vault/asset_wallets", + "name": "vault_asset_wallets_get", + "parameters": [ + { + "type": "object", + "properties": { + "totalAmountLargerThan": { + "type": "number", + "description": "When specified, only asset wallets with total balance larger than this amount are returned." + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "When specified, only asset wallets cross vault accounts that have this asset ID are returned." + }, + "before": { + "type": "string", + "description": "Fetches the next paginated response before this element. This element is a cursor and is returned at the response of the previous page." + }, + "after": { + "type": "string", + "description": "Fetches the next paginated response after this element. This element is a cursor and is returned at the response of the previous page." + }, + "limit": { + "type": "number", + "minimum": 1, + "maximum": 1000, + "default": 200, + "description": "The maximum number of asset wallets in a single response. The default is 200 and the maximum is 1000." + } + }, + "required": [] + } + ], + "output": { + "type": "object", + "properties": { + "assetWallets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "vaultId": { + "description": "ID of the vault account. You can [get the vault account by this ID](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid) to retrieve vault properties such as its name, auto fueling, hidden on UI or customer reference ID.", + "type": "string" + }, + "assetId": { + "description": "ID of the asset. You can get more information about this asset by using the [supported assets API](https://developers.fireblocks.com/reference/get_supported-assets)", + "type": "string" + }, + "available": { + "description": "Available balance, available to use in a transaction.", + "type": "string" + }, + "total": { + "description": "Total balance at the asset wallet, as seen at the blockchain explorers. This includes balance available, and any kind of unavailable balance such as locked, frozen, or others.", + "type": "string" + }, + "pending": { + "description": "Pending balance.", + "type": "string" + }, + "staked": { + "description": "Staked balance.", + "type": "string" + }, + "frozen": { + "description": "Funds frozen due to the anti-money laundering policy at this workspace.", + "type": "string" + }, + "lockedAmount": { + "description": "Locked balance.", + "type": "string" + }, + "blockHeight": { + "description": "The height (number) of the block of the balance. Can by empty.", + "type": "string" + }, + "blockHash": { + "description": "The hash of the block of the balance. Can by empty.", + "type": "string" + }, + "creationTimestamp": { + "description": "Unix timestamp of the time the asset wallet was created.", + "type": "string" + } + } + } + }, + "paging": { + "type": "object", + "properties": { + "before": { + "description": "A string representing a cursor. Users can use this with a new request to this API endpoint as the “before” request parameter to fetch the previous page of results.", + "type": "string" + }, + "after": { + "description": "A string representing a cursor. Users can use this with a new request to this API endpoint as the “before” request parameter to fetch the next page of results.", + "type": "string" + } + } + } + } + }, + "description": "List asset wallets (Paginated).\n\nGets all asset wallets at all of the vault accounts in your workspace. An asset wallet is an asset at a vault account. This method allows fast traversal of all account balances.\n**Note:**\n - This API endpoint is in limited availability and available for selected customers. If you would like to get early access to this endpoint, please reach out to [Fireblocks Support](https://support.fireblocks.io/hc/en-us/requests/new?ticket_form_id=36000337220)\n - This API call is subject to [rate limits](https://developers.fireblocks.com/reference/rate-limiting).\n" + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/hide", + "name": "vault_accounts_hide_postByVaultaccountid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The vault account to hide" + } + ], + "description": "Hide a vault account in the console.\n\nHides the requested vault account from the web console view." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/unhide", + "name": "vault_accounts_unhide_postByVaultaccountid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The vault account to unhide" + } + ], + "description": "Unhide a vault account in the console.\n\nMakes a hidden vault account visible in web console view." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/activate", + "name": "vault_accounts_activate_postByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to return, or 'default' for the default vault account" + }, + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "address": { + "type": "string" + }, + "legacyAddress": { + "type": "string" + }, + "enterpriseAddress": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "eosAccountName": { + "type": "string" + }, + "status": { + "type": "string" + }, + "activationTxId": { + "type": "string" + } + } + }, + "description": "Activate a wallet in a vault account.\n\nInitiates activation for a wallet in a vault account." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/set_customer_ref_id", + "name": "vault_accounts_set_customer_ref_id_postByVaultaccountid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The vault account ID" + }, + {} + ], + "description": "Set an AML/KYT customer reference ID for a vault account.\n\nAssigns an AML/KYT customer reference ID for the vault account." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/set_auto_fuel", + "name": "vault_accounts_set_auto_fuel_postByVaultaccountid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The vault account ID" + }, + {} + ], + "description": "Turn autofueling on or off.\n\nSets the autofueling property of the vault account to enabled or disabled." + }, + { + "method": "get", + "path": "/vault/accounts/{vaultAccountId}/{assetId}", + "name": "vault_accounts_getByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to return" + }, + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + }, + "description": "Get the asset balance for a vault account.\n\nReturns a wallet for a specific asset of a vault account." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/{assetId}", + "name": "vault_accounts_postByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to return, or 'default' for the default vault account" + }, + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + {} + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "address": { + "type": "string" + }, + "legacyAddress": { + "type": "string" + }, + "enterpriseAddress": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "eosAccountName": { + "type": "string" + }, + "status": { + "type": "string" + }, + "activationTxId": { + "type": "string" + } + } + }, + "description": "Create a new wallet.\n\nCreates a wallet for a specific asset in a vault account." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/balance", + "name": "vault_accounts_balance_postByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to return" + }, + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + { + "type": "object" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + }, + "description": "Refresh asset balance data.\n\nUpdates the balance of a specific asset in a vault account." + }, + { + "method": "get", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/addresses", + "name": "vault_accounts_addresses_getByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to return" + }, + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "assetId": { + "type": "string", + "x-fb-entity": "asset" + }, + "address": { + "type": "string" + }, + "description": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "addressFormat": { + "type": "string", + "enum": [ + "SEGWIT", + "LEGACY" + ] + }, + "legacyAddress": { + "type": "string" + }, + "enterpriseAddress": { + "type": "string" + }, + "bip44AddressIndex": { + "type": "integer" + }, + "userDefined": { + "type": "boolean" + } + } + } + }, + "description": "Get asset addresses.\n\nLists all addresses for specific asset of vault account." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/addresses", + "name": "vault_accounts_addresses_postByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account to return" + }, + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + {} + ], + "output": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "legacyAddress": { + "type": "string" + }, + "enterpriseAddress": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "bip44AddressIndex": { + "type": "integer" + } + } + }, + "description": "Create new asset deposit address.\n\nCreates a new deposit address for an asset of a vault account." + }, + { + "method": "get", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/max_spendable_amount", + "name": "vault_accounts_max_spendable_amount_getByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account, or 'default' for the default vault account" + }, + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + { + "type": "object", + "properties": { + "manualSignging": { + "type": "boolean", + "description": "False by default. The maximum number of inputs depends if the transaction will be signed by an automated co-signer server or on a mobile device." + } + }, + "required": [] + } + ], + "description": "Get the maximum spendable amount in a single transaction.\n\nGet the maximum amount of a particular asset that can be spent in a single transaction from a specified vault account (UTXO assets only, with a limitation on number of inputs embedded). Send several transactions if you want to spend more than the maximum spendable amount." + }, + { + "method": "put", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/addresses/{addressId}", + "name": "vault_accounts_addresses_putByVaultaccountidAndAssetidAndAddressid", + "parameters": [ + { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account" + }, + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + { + "type": "string", + "description": "The address for which to add a description. For XRP, use
:, for all other assets, use only the address" + }, + {} + ], + "description": "Update address description.\n\nUpdates the description of an existing address of an asset in a vault account." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/addresses/{addressId}/set_customer_ref_id", + "name": "vault_accounts_addresses_set_customer_ref_id_postByVaultaccountidAndAssetidAndAddressid", + "parameters": [ + { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account" + }, + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + { + "type": "string", + "description": "The address for which to add a description. For XRP, use
:, for all other assets, use only the address" + }, + {} + ], + "description": "Assign AML customer reference ID.\n\nSets an AML/KYT customer reference ID for a specific address." + }, + { + "method": "post", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/addresses/{addressId}/create_legacy", + "name": "vault_accounts_addresses_create_legacy_postByVaultaccountidAndAssetidAndAddressid", + "parameters": [ + { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account" + }, + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + { + "type": "string", + "description": "The segwit address to translate" + } + ], + "output": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "legacyAddress": { + "type": "string" + }, + "enterpriseAddress": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "bip44AddressIndex": { + "type": "integer" + } + } + }, + "description": "Convert a segwit address to legacy format.\n\nConverts an existing segwit address to the legacy format." + }, + { + "method": "get", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/unspent_inputs", + "name": "vault_accounts_unspent_inputs_getByVaultaccountidAndAssetid", + "parameters": [ + { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account", + "description": "The ID of the vault account" + }, + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "input": { + "type": "object", + "properties": { + "txHash": { + "type": "string" + }, + "index": { + "type": "number" + } + } + }, + "address": { + "type": "string" + }, + "amount": { + "type": "string" + }, + "confirmations": { + "type": "number" + }, + "status": { + "type": "string" + } + } + } + }, + "description": "Get UTXO unspent inputs information.\n\nReturns unspent inputs information of an asset in a vault account." + }, + { + "method": "get", + "path": "/vault/public_key_info/", + "name": "vault_public_key_info_get", + "parameters": [ + { + "type": "object", + "properties": { + "derivationPath": { + "type": "string" + }, + "algorithm": { + "type": "string" + }, + "compressed": { + "type": "boolean" + } + }, + "required": [ + "derivationPath", + "algorithm" + ] + } + ], + "output": { + "type": "object", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "array", + "items": { + "type": "number" + } + }, + "publicKey": { + "type": "string" + } + } + }, + "description": "Get the public key information.\n\nGets the public key information based on derivation path and signing algorithm." + }, + { + "method": "get", + "path": "/vault/accounts/{vaultAccountId}/{assetId}/{change}/{addressIndex}/public_key_info", + "name": "vault_accounts_public_key_info_getByVaultaccountidAndAssetidAndChangeAndAddressindex", + "parameters": [ + { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + }, + { + "type": "string", + "x-fb-entity": "asset" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "object", + "properties": { + "compressed": { + "type": "boolean" + } + }, + "required": [] + } + ], + "output": { + "type": "object", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "array", + "items": { + "type": "number" + } + }, + "publicKey": { + "type": "string" + } + } + }, + "description": "Get the public key for a vault account.\n\nGets the public key information for the vault account." + }, + { + "method": "get", + "path": "/vault/assets", + "name": "vault_assets_get", + "parameters": [ + { + "type": "object", + "properties": { + "accountNamePrefix": { + "type": "string" + }, + "accountNameSuffix": { + "type": "string" + } + }, + "required": [] + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + } + }, + "description": "Get asset balance for chosen assets.\n\nGets the assets amount summary for all accounts or filtered accounts." + }, + { + "method": "get", + "path": "/vault/assets/{assetId}", + "name": "vault_assets_getByAssetid", + "parameters": [ + { + "type": "string", + "x-fb-entity": "asset" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + } + } + }, + "description": "Get vault balance by asset.\n\nGets the vault balance summary for an asset." + }, + { + "method": "get", + "path": "/exchange_accounts", + "name": "exchange_accounts_get", + "parameters": [], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "CIRCLE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "FTX", + "FIXUS", + "GEMINI", + "HITBTC", + "HUOBI", + "KORBIT", + "KRAKEN", + "LIQUID", + "POLONIEX", + "OKCOIN", + "OKEX", + "SEEDCX" + ] + }, + "name": { + "type": "string", + "description": "Display name of the exchange account" + }, + "status": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "total": { + "type": "string" + }, + "available": { + "type": "string" + } + } + } + }, + "tradingAccounts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "total": { + "type": "string" + }, + "available": { + "type": "string" + } + } + } + } + } + } + }, + "isSubaccount": { + "type": "boolean", + "description": "True if the account is a subaccount in an exchange" + }, + "mainAccountId": { + "description": "if the account is a sub-account, the ID of the main account", + "type": "string" + } + } + } + }, + "description": "List exchange accounts.\n\nReturns all exchange accounts." + }, + { + "method": "get", + "path": "/exchange_accounts/{exchangeAccountId}", + "name": "exchange_accounts_getByExchangeaccountid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the exchange account to return" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "CIRCLE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "FTX", + "FIXUS", + "GEMINI", + "HITBTC", + "HUOBI", + "KORBIT", + "KRAKEN", + "LIQUID", + "POLONIEX", + "OKCOIN", + "OKEX", + "SEEDCX" + ] + }, + "name": { + "type": "string", + "description": "Display name of the exchange account" + }, + "status": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "total": { + "type": "string" + }, + "available": { + "type": "string" + } + } + } + }, + "tradingAccounts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "total": { + "type": "string" + }, + "available": { + "type": "string" + } + } + } + } + } + } + }, + "isSubaccount": { + "type": "boolean", + "description": "True if the account is a subaccount in an exchange" + }, + "mainAccountId": { + "description": "if the account is a sub-account, the ID of the main account", + "type": "string" + } + } + }, + "description": "Find a specific exchange account.\n\nReturns an exchange account by ID." + }, + { + "method": "post", + "path": "/exchange_accounts/{exchangeAccountId}/internal_transfer", + "name": "exchange_accounts_internal_transfer_postByExchangeaccountid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the exchange account to return" + }, + {} + ], + "description": "Internal tranfer for exchange accounts.\n\nTransfers funds between trading accounts under the same exchange account." + }, + { + "method": "post", + "path": "/exchange_accounts/{exchangeAccountId}/convert", + "name": "exchange_accounts_convert_postByExchangeaccountid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the exchange account. Please make sure the exchange supports conversions. To find the ID of your exchange account, use GET/exchange_accounts." + }, + {} + ], + "description": "Convert exchange account funds from the source asset to the destination asset. Coinbase (USD to USDC, USDC to USD) and Bitso (MXN to USD) are supported conversions." + }, + { + "method": "get", + "path": "/exchange_accounts/{exchangeAccountId}/{assetId}", + "name": "exchange_accounts_getByExchangeaccountidAndAssetid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the exchange account to return" + }, + { + "type": "string", + "minimum": 1, + "description": "The ID of the asset to return" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "total": { + "type": "string" + }, + "available": { + "type": "string" + } + } + }, + "description": "Find an asset for an exchange account.\n\nReturns an asset for an exchange account." + }, + { + "method": "get", + "path": "/fiat_accounts", + "name": "fiat_accounts_get", + "parameters": [], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "BLINC" + ] + }, + "name": { + "type": "string", + "description": "Display name of the fiat account" + }, + "address": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + } + } + } + } + } + } + }, + "description": "List fiat accounts.\n\nReturns all fiat accounts." + }, + { + "method": "get", + "path": "/fiat_accounts/{accountId}", + "name": "fiat_accounts_getByAccountid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the fiat account to return" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "BLINC" + ] + }, + "name": { + "type": "string", + "description": "Display name of the fiat account" + }, + "address": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + } + } + } + } + } + }, + "description": "Find a specific fiat account.\n\nReturns a fiat account by ID." + }, + { + "method": "post", + "path": "/fiat_accounts/{accountId}/redeem_to_linked_dda", + "name": "fiat_accounts_redeem_to_linked_dda_postByAccountid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the fiat account to use" + }, + {} + ], + "description": "Redeem funds to DDA.\n\nRedeems funds to the linked DDA." + }, + { + "method": "post", + "path": "/fiat_accounts/{accountId}/deposit_from_linked_dda", + "name": "fiat_accounts_deposit_from_linked_dda_postByAccountid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the fiat account to use" + }, + {} + ], + "description": "Deposit funds from DDA.\n\nDeposits funds from the linked DDA." + }, + { + "method": "get", + "path": "/network_connections", + "name": "network_connections_get", + "parameters": [], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "localChannel": { + "deprecated": true, + "description": "Deprecated - Replaced by `localNetworkId`", + "type": "object", + "properties": { + "networkId": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "remoteChannel": { + "deprecated": true, + "description": "Deprecated - Replaced by `remoteNetworkId`", + "type": "object", + "properties": { + "networkId": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "localNetworkId": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "remoteNetworkId": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "routingPolicy": { + "type": "object", + "properties": { + "crypto": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "VAULT", + "EXCHANGE" + ], + "description": "The type of destination account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the destination account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "signet": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + }, + "signet_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + } + } + } + }, + "required": [ + "id", + "localNetworkId", + "remoteNetworkId", + "routingPolicy", + "status" + ] + } + }, + "description": "List network connections.\n\nReturns all network connections.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "post", + "path": "/network_connections", + "name": "network_connections_post", + "parameters": [ + { + "type": "object", + "properties": { + "localNetworkId": { + "type": "string", + "description": "The network ID of the profile trying to create the connection." + }, + "remoteNetworkId": { + "type": "string", + "description": "The network ID the profile is attempting to connect to." + }, + "routingPolicy": { + "type": "object", + "properties": { + "crypto": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "VAULT", + "EXCHANGE" + ], + "description": "The type of destination account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the destination account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "signet": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + }, + "signet_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + } + } + } + }, + "required": [ + "localNetworkId", + "remoteNetworkId" + ] + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "localChannel": { + "deprecated": true, + "description": "Deprecated - Replaced by `localNetworkId`", + "type": "object", + "properties": { + "networkId": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "remoteChannel": { + "deprecated": true, + "description": "Deprecated - Replaced by `remoteNetworkId`", + "type": "object", + "properties": { + "networkId": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "localNetworkId": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "remoteNetworkId": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "routingPolicy": { + "type": "object", + "properties": { + "crypto": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "VAULT", + "EXCHANGE" + ], + "description": "The type of destination account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the destination account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "signet": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + }, + "signet_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + } + } + } + }, + "required": [ + "id", + "localNetworkId", + "remoteNetworkId", + "routingPolicy", + "status" + ] + }, + "description": "Creates a new network connection.\n\nInitiates a new network connection.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "patch", + "path": "/network_connections/{connectionId}/set_routing_policy", + "name": "network_connections_set_routing_policy_patchByConnectionid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the network connection" + }, + {} + ], + "output": {}, + "description": "Update network connection routing policy.\n\nUpdates an existing network connection's routing policy.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "get", + "path": "/network_connections/{connectionId}/is_third_party_routing/{assetType}", + "name": "network_connections_is_third_party_routing_getByConnectionidAndAssettype", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the network connection" + }, + { + "type": "string", + "enum": [ + "CRYPTO", + "SIGNET", + "SEN", + "SIGNET_TEST", + "SEN_TEST" + ], + "description": "The destination asset type" + } + ], + "output": {}, + "description": "Retrieve third-party network routing validation by asset type.\n\nThe Fireblocks Network allows for flexibility around incoming deposits. A receiver can receive network deposits to locations other than Fireblocks. This endpoint validates whether future transactions are routed to the displayed recipient or to a 3rd party." + }, + { + "method": "get", + "path": "/network_connections/{connectionId}", + "name": "network_connections_getByConnectionid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the connection" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "localChannel": { + "deprecated": true, + "description": "Deprecated - Replaced by `localNetworkId`", + "type": "object", + "properties": { + "networkId": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "remoteChannel": { + "deprecated": true, + "description": "Deprecated - Replaced by `remoteNetworkId`", + "type": "object", + "properties": { + "networkId": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "localNetworkId": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "remoteNetworkId": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "routingPolicy": { + "type": "object", + "properties": { + "crypto": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "VAULT", + "EXCHANGE" + ], + "description": "The type of destination account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the destination account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "signet": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + }, + "signet_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "DEFAULT" + ], + "description": "The network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + } + } + } + }, + "required": [ + "id", + "localNetworkId", + "remoteNetworkId", + "routingPolicy", + "status" + ] + }, + "description": "Get a network connection.\n\nGets a network connection by ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "delete", + "path": "/network_connections/{connectionId}", + "name": "network_connections_eraseByConnectionid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the network connection to delete" + } + ], + "output": {}, + "description": "Deletes a network connection by ID.\n\nDeletes an existing network connection specified by its connection ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "get", + "path": "/network_ids", + "name": "network_ids_get", + "parameters": [], + "output": { + "type": "array", + "items": {} + }, + "description": "Returns all network IDs, both local IDs and discoverable remote IDs.\n\nRetrieves a list of all local and discoverable remote network IDs.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "post", + "path": "/network_ids", + "name": "network_ids_post", + "parameters": [ + {} + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "routingPolicy": { + "type": "object", + "properties": { + "crypto": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "VAULT", + "EXCHANGE" + ], + "description": "The type of destination account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the destination account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "signet": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + }, + "signet_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + } + } + }, + "isDiscoverable": { + "type": "boolean", + "description": "The specific network is discoverable." + } + } + }, + "description": "Creates a new Network ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "get", + "path": "/network_ids/{networkId}", + "name": "network_ids_getByNetworkid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the network" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "routingPolicy": { + "type": "object", + "properties": { + "crypto": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "VAULT", + "EXCHANGE" + ], + "description": "The type of destination account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the destination account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "signet": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + } + ] + }, + "sen_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + }, + "signet_test": { + "oneOf": [ + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "NONE" + ], + "description": "No network routing logic." + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "enum": [ + "CUSTOM" + ], + "description": "The network routing logic." + }, + "dstType": { + "type": "string", + "enum": [ + "FIAT_ACCOUNT" + ], + "description": "The fiat account the funds are being sent to." + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + } + ] + } + } + }, + "isDiscoverable": { + "type": "boolean", + "description": "The specific network is discoverable." + } + } + }, + "description": "Returns specific network ID.\n\nRetrieves a network by its ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "delete", + "path": "/network_ids/{networkId}", + "name": "network_ids_eraseByNetworkid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the network" + } + ], + "output": {}, + "description": "Deletes specific network ID.\n\nDeletes a network by its ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "patch", + "path": "/network_ids/{networkId}/set_routing_policy", + "name": "network_ids_set_routing_policy_patchByNetworkid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the network" + }, + {} + ], + "output": {}, + "description": "Update network id routing policy.\n\nUpdates the routing policy of a specified network ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "patch", + "path": "/network_ids/{networkId}/set_discoverability", + "name": "network_ids_set_discoverability_patchByNetworkid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the network" + }, + {} + ], + "output": {}, + "description": "Update network ID's discoverability.\n\nUpdate whether or not the network ID is discoverable by others.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "patch", + "path": "/network_ids/{networkId}/set_name", + "name": "network_ids_set_name_patchByNetworkid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the network" + }, + {} + ], + "output": {}, + "description": "Update network ID's name.\n\nUpdates name of a specified network ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n" + }, + { + "method": "get", + "path": "/internal_wallets", + "name": "internal_wallets_get", + "parameters": [], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + } + }, + "description": "List internal wallets.\n\nGets a list of internal wallets.\n\n**Note**: BTC-based assets belonging to whitelisted addresses cannot be retrieved between 00:00 UTC and 00:01 UTC daily due to third-party provider, Blockchair, being unavailable for this 60 second period. Please wait until the next minute to retrieve BTC-based assets.\n" + }, + { + "method": "post", + "path": "/internal_wallets", + "name": "internal_wallets_post", + "parameters": [ + {} + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + }, + "description": "Create an internal wallet.\n\nCreates a new internal wallet with the requested name." + }, + { + "method": "get", + "path": "/internal_wallets/{walletId}", + "name": "internal_wallets_getByWalletid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet to return" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + }, + "description": "Get assets for internal wallet.\n\nReturns all assets in an internal wallet by ID." + }, + { + "method": "delete", + "path": "/internal_wallets/{walletId}", + "name": "internal_wallets_eraseByWalletid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet to delete" + } + ], + "description": "Delete an internal wallet.\n\nDeletes an internal wallet by ID." + }, + { + "method": "post", + "path": "/internal_wallets/{walletId}/set_customer_ref_id", + "name": "internal_wallets_set_customer_ref_id_postByWalletid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The wallet ID" + }, + {} + ], + "description": "Set an AML/KYT customer reference ID for an internal wallet.\n\nSets an AML/KYT customer reference ID for the specific internal wallet." + }, + { + "method": "get", + "path": "/internal_wallets/{walletId}/{assetId}", + "name": "internal_wallets_getByWalletidAndAssetid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet" + }, + { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset", + "description": "The ID of the asset to return" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + }, + "description": "Get an asset from an internal wallet.\n\nReturns information for an asset in an internal wallet." + }, + { + "method": "post", + "path": "/internal_wallets/{walletId}/{assetId}", + "name": "internal_wallets_postByWalletidAndAssetid", + "parameters": [ + { + "type": "string", + "description": "The ID of the wallet" + }, + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset to add" + }, + {} + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + }, + "description": "Add an asset to an internal wallet.\n\nAdds an asset to an existing internal wallet." + }, + { + "method": "delete", + "path": "/internal_wallets/{walletId}/{assetId}", + "name": "internal_wallets_eraseByWalletidAndAssetid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet" + }, + { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset", + "description": "The ID of the asset to delete" + } + ], + "description": "Delete a whitelisted address from an internal wallet.\n\nDeletes a whitelisted address (for an asset) from an internal wallet." + }, + { + "method": "get", + "path": "/external_wallets", + "name": "external_wallets_get", + "parameters": [], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + } + }, + "description": "List external wallets.\n\nGets a list of external wallets under the workspace." + }, + { + "method": "post", + "path": "/external_wallets", + "name": "external_wallets_post", + "parameters": [ + {} + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + }, + "description": "Create an external wallet.\n\nCreates a new external wallet with the requested name." + }, + { + "method": "get", + "path": "/external_wallets/{walletId}", + "name": "external_wallets_getByWalletid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet to return" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + }, + "description": "Find an external wallet.\n\nReturns an external wallet by ID." + }, + { + "method": "delete", + "path": "/external_wallets/{walletId}", + "name": "external_wallets_eraseByWalletid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet to delete" + } + ], + "description": "Delete an external wallet.\n\nDeletes an external wallet by ID." + }, + { + "method": "post", + "path": "/external_wallets/{walletId}/set_customer_ref_id", + "name": "external_wallets_set_customer_ref_id_postByWalletid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The wallet ID" + }, + {} + ], + "description": "Set an AML customer reference ID for an external wallet.\n\nSets an AML/KYT customer reference ID for the specific external wallet." + }, + { + "method": "get", + "path": "/external_wallets/{walletId}/{assetId}", + "name": "external_wallets_getByWalletidAndAssetid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet" + }, + { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset", + "description": "The ID of the asset to return" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + }, + "additionalInfo": { + "type": "array", + "items": { + "type": "object", + "properties": { + "accountHolderGivenName": { + "type": "string" + }, + "accountHolderSurname": { + "type": "string" + }, + "accountHolderCity": { + "type": "string" + }, + "accountHolderCountry": { + "type": "string" + }, + "accountHolderAddress1": { + "type": "string" + }, + "accountHolderAddress2": { + "type": "string" + }, + "accountHolderDistrict": { + "type": "string" + }, + "accountHolderPostalCode": { + "type": "string" + }, + "abaRoutingNumber": { + "type": "string" + }, + "abaAccountNumber": { + "type": "string" + }, + "abaCountry": { + "type": "string" + }, + "iban": { + "type": "string" + }, + "ibanCity": { + "type": "string" + }, + "ibanCountry": { + "type": "string" + }, + "speiClabe": { + "type": "string" + }, + "speiName": { + "type": "string" + } + } + } + } + } + }, + "description": "Get an asset from an external wallet.\n\nReturns an external wallet by wallet ID and asset ID." + }, + { + "method": "post", + "path": "/external_wallets/{walletId}/{assetId}", + "name": "external_wallets_postByWalletidAndAssetid", + "parameters": [ + { + "type": "string", + "description": "The ID of the wallet" + }, + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset to add" + }, + {} + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + }, + "additionalInfo": { + "type": "array", + "items": { + "type": "object", + "properties": { + "accountHolderGivenName": { + "type": "string" + }, + "accountHolderSurname": { + "type": "string" + }, + "accountHolderCity": { + "type": "string" + }, + "accountHolderCountry": { + "type": "string" + }, + "accountHolderAddress1": { + "type": "string" + }, + "accountHolderAddress2": { + "type": "string" + }, + "accountHolderDistrict": { + "type": "string" + }, + "accountHolderPostalCode": { + "type": "string" + }, + "abaRoutingNumber": { + "type": "string" + }, + "abaAccountNumber": { + "type": "string" + }, + "abaCountry": { + "type": "string" + }, + "iban": { + "type": "string" + }, + "ibanCity": { + "type": "string" + }, + "ibanCountry": { + "type": "string" + }, + "speiClabe": { + "type": "string" + }, + "speiName": { + "type": "string" + } + } + } + } + } + }, + "description": "Add an asset to an external wallet.\n\nAdds an asset to an existing external wallet." + }, + { + "method": "delete", + "path": "/external_wallets/{walletId}/{assetId}", + "name": "external_wallets_eraseByWalletidAndAssetid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the wallet" + }, + { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset", + "description": "The ID of the asset to delete" + } + ], + "description": "Delete an asset from an external wallet.\n\nDeletes an external wallet asset by ID." + }, + { + "method": "get", + "path": "/contracts", + "name": "contracts_get", + "parameters": [], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + } + }, + "description": "List contracts.\n\nGets a list of contracts." + }, + { + "method": "post", + "path": "/contracts", + "name": "contracts_post", + "parameters": [ + {} + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + }, + "description": "Create a contract.\n\nCreates a new contract." + }, + { + "method": "get", + "path": "/contracts/{contractId}", + "name": "contracts_getByContractid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the contract to return" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "status" + ] + }, + "description": "Find a specific contract.\n\nReturns a contract by ID." + }, + { + "method": "delete", + "path": "/contracts/{contractId}", + "name": "contracts_eraseByContractid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the contract to delete" + } + ], + "description": "Delete a contract.\n\nDeletes a contract by ID." + }, + { + "method": "get", + "path": "/contracts/{contractId}/{assetId}", + "name": "contracts_getByContractidAndAssetid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the contract" + }, + { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset", + "description": "The ID of the asset to return" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + }, + "additionalInfo": { + "type": "array", + "items": { + "type": "object", + "properties": { + "accountHolderGivenName": { + "type": "string" + }, + "accountHolderSurname": { + "type": "string" + }, + "accountHolderCity": { + "type": "string" + }, + "accountHolderCountry": { + "type": "string" + }, + "accountHolderAddress1": { + "type": "string" + }, + "accountHolderAddress2": { + "type": "string" + }, + "accountHolderDistrict": { + "type": "string" + }, + "accountHolderPostalCode": { + "type": "string" + }, + "abaRoutingNumber": { + "type": "string" + }, + "abaAccountNumber": { + "type": "string" + }, + "abaCountry": { + "type": "string" + }, + "iban": { + "type": "string" + }, + "ibanCity": { + "type": "string" + }, + "ibanCountry": { + "type": "string" + }, + "speiClabe": { + "type": "string" + }, + "speiName": { + "type": "string" + } + } + } + } + } + }, + "description": "Find a contract asset.\n\nReturns a contract asset by ID." + }, + { + "method": "post", + "path": "/contracts/{contractId}/{assetId}", + "name": "contracts_postByContractidAndAssetid", + "parameters": [ + { + "type": "string", + "description": "The ID of the contract" + }, + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset to add" + }, + {} + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + }, + "additionalInfo": { + "type": "array", + "items": { + "type": "object", + "properties": { + "accountHolderGivenName": { + "type": "string" + }, + "accountHolderSurname": { + "type": "string" + }, + "accountHolderCity": { + "type": "string" + }, + "accountHolderCountry": { + "type": "string" + }, + "accountHolderAddress1": { + "type": "string" + }, + "accountHolderAddress2": { + "type": "string" + }, + "accountHolderDistrict": { + "type": "string" + }, + "accountHolderPostalCode": { + "type": "string" + }, + "abaRoutingNumber": { + "type": "string" + }, + "abaAccountNumber": { + "type": "string" + }, + "abaCountry": { + "type": "string" + }, + "iban": { + "type": "string" + }, + "ibanCity": { + "type": "string" + }, + "ibanCountry": { + "type": "string" + }, + "speiClabe": { + "type": "string" + }, + "speiName": { + "type": "string" + } + } + } + } + } + }, + "description": "Add an asset to a contract.\n\nAdds an asset to an existing contract." + }, + { + "method": "delete", + "path": "/contracts/{contractId}/{assetId}", + "name": "contracts_eraseByContractidAndAssetid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the contract" + }, + { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset", + "description": "The ID of the asset to delete" + } + ], + "description": "Delete a contract asset.\n\nDeletes a contract asset by ID." + }, + { + "method": "get", + "path": "/supported_assets", + "name": "supported_assets_get", + "parameters": [], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "ALGO_ASSET", + "BASE_ASSET", + "BEP20", + "COMPOUND", + "ERC20", + "FIAT", + "SOL_ASSET", + "TRON_TRC20", + "XLM_ASSET", + "XDB_ASSET" + ] + }, + "contractAddress": { + "type": "string" + }, + "nativeAsset": { + "type": "string" + }, + "decimals": { + "type": "number" + } + }, + "required": [ + "id", + "name", + "type" + ] + } + }, + "description": "List all asset types supported by Fireblocks.\n\nReturns all asset types supported by Fireblocks." + }, + { + "method": "get", + "path": "/estimate_network_fee", + "name": "estimate_network_fee_get", + "parameters": [ + { + "type": "object", + "properties": { + "assetId": { + "type": "string", + "x-fb-entity": "asset", + "description": "The asset for which to estimate the fee" + } + }, + "required": [ + "assetId" + ] + } + ], + "output": { + "type": "object", + "properties": { + "low": { + "type": "object", + "properties": { + "feePerByte": { + "type": "string" + }, + "gasPrice": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "baseFee": { + "description": "(optional) Base Fee according to EIP-1559 (ETH assets)", + "type": "string" + }, + "priorityFee": { + "description": "(optional) Priority Fee according to EIP-1559 (ETH assets)", + "type": "string" + } + } + }, + "medium": { + "type": "object", + "properties": { + "feePerByte": { + "type": "string" + }, + "gasPrice": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "baseFee": { + "description": "(optional) Base Fee according to EIP-1559 (ETH assets)", + "type": "string" + }, + "priorityFee": { + "description": "(optional) Priority Fee according to EIP-1559 (ETH assets)", + "type": "string" + } + } + }, + "high": { + "type": "object", + "properties": { + "feePerByte": { + "type": "string" + }, + "gasPrice": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "baseFee": { + "description": "(optional) Base Fee according to EIP-1559 (ETH assets)", + "type": "string" + }, + "priorityFee": { + "description": "(optional) Priority Fee according to EIP-1559 (ETH assets)", + "type": "string" + } + } + } + }, + "required": [ + "low", + "medium", + "high" + ] + }, + "description": "Estimate the required fee for an asset.\n\nGets the estimated required fee for an asset. For UTXO based assets, the response will contain the suggested fee per byte, for ETH/ETC based assets, the suggested gas price, and for XRP/XLM, the transaction fee." + }, + { + "method": "get", + "path": "/transactions/validate_address/{assetId}/{address}", + "name": "transactions_validate_address_getByAssetidAndAddress", + "parameters": [ + { + "type": "string", + "x-fb-entity": "asset", + "description": "The asset of the address" + }, + { + "type": "string", + "description": "The address to validate" + } + ], + "output": { + "type": "object", + "properties": { + "isValid": { + "type": "boolean" + }, + "isActive": { + "type": "boolean" + }, + "requiresTag": { + "type": "boolean" + } + } + }, + "description": "Validate destination address.\n\nChecks if an address is valid (for XRP, DOT, XLM, and EOS)." + }, + { + "method": "get", + "path": "/transactions", + "name": "transactions_get", + "parameters": [ + { + "type": "object", + "properties": { + "before": { + "type": "string", + "description": "Unix timestamp in milliseconds. Returns only transactions created before the specified date" + }, + "after": { + "type": "string", + "description": "Unix timestamp in milliseconds. Returns only transactions created after the specified date" + }, + "status": { + "type": "string", + "description": "You can filter by one of the statuses." + }, + "limit": { + "type": "integer", + "minimum": 1, + "default": 200, + "description": "Limits the number of results. If not provided, a limit of 200 will be used. The maximum allowed limit is 500" + }, + "sourceId": { + "type": "string", + "description": "The source ID of the transaction" + }, + "destId": { + "type": "string", + "description": "The destination ID of the transaction" + }, + "assets": { + "type": "string", + "description": "A list of assets to filter by, seperated by commas" + }, + "txHash": { + "type": "string", + "description": "Returns only results with a specified txHash" + }, + "sourceWalletId": { + "type": "string", + "description": "Returns only results where the source is a specific end user wallet" + }, + "destWalletId": { + "type": "string", + "description": "Returns only results where the destination is a specific end user wallet" + } + }, + "required": [] + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the transaction." + }, + "externalTxId": { + "type": "string", + "description": "Unique transaction ID provided by the user. Fireblocks highly recommends setting an `externalTxId` for every transaction created, to avoid submitting the same transaction twice." + }, + "status": { + "type": "string", + "description": "The primary status of the transaction. For details, see [Primary transaction statuses](https://developers.fireblocks.com/reference/primary-transaction-statuses)." + }, + "subStatus": { + "type": "string", + "description": "See [Transaction substatuses](https://developers.fireblocks.com/reference/transaction-substatuses) for the list of transaction sub statuses." + }, + "txHash": { + "type": "string", + "description": "The hash of the transaction on the blockchain.\n * This parameter exists if at least one of the following conditions is met:\n\n 1. The transaction’s source type is `UNKNOWN`, `WHITELISTED_ADDRESS`, `NETWORK_CONNECTION`, `ONE_TIME_ADDRESS`, `FIAT_ACCOUNT` or `GAS_STATION`.\n\n 2. The transaction’s source type is `VAULT` and the status is either: `CONFIRMING`, `COMPLETED`, or was in any of these statuses prior to changing to `FAILED` or `REJECTED`. In some instances, transactions in status `BROADCASTING` will include the txHash as well.\n\n 3. The transaction’s source type is `EXCHANGE_ACCOUNT` and the transaction’s destination type is `VAULT`, and the status is either: `CONFIRMING`, `COMPLETED`, or was in any of these status prior to changing to `FAILED`.\n \n\n* In addition, the following conditions must be met:\n\n 1. The asset is a crypto asset (not fiat).\n\n 2. The transaction operation is not RAW or `TYPED_MESSAGE`." + }, + "operation": { + "type": "string", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE", + "ENABLE_ASSET", + "STAKE", + "UNSTAKE", + "WITHDRAW", + "REDEEM_FROM_COMPOUND", + "SUPPLY_TO_COMPOUND" + ], + "description": "* `TRANSFER` - Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n* `ENABLE_ASSET` - Algorand, DigitalBits, Solana, and Stellar require an on-chain transaction to create an asset wallet and enable the deposit address. This transaction is automatically created when adding assets on these blockchains at a vault account.\n* `STAKE` - Assign assets to a staking pool managed by a staking validator. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n* `UNSTAKE` - Remove assets from a staking pool managed by a staking validator. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n* `WITHDRAW` - Transfer assets from a dedicated staking vault account to another address. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n\n **Note:** Fireblocks will rename this type from `WITHDRAW` to a different type name soon. There will be a 7-day notice regarding the new type name.\n\n* `SUPPLY_TO_COMPOUND` - Deprecated since April 1st, 2023. Older transactions may have this as their operation, in case users in the workspace have used the direct integration between Fireblocks and the Compound DeFI protocol.\n* `REDEEM_FROM_COMPOUND` - Deprecated since April 1st, 2023. Older transactions may have this as their operation, in case users in the workspace have used the direct integration between Fireblocks and the Compound DeFI protocol.\n" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, that describes the transaction at your Fireblocks workspace." + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT`, `BURN`, `ENABLE_ASSET`,`STAKE` ,`UNSTAKE` or `WITHDRAW` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset" + }, + "source": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name. In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "sourceAddress": { + "type": "string", + "description": "For account based assets only, the source address of the transaction.\n**Note:** If the status is `CONFIRMING`, `COMPLETED`, or has been `CONFIRMING`; then moved forward to `FAILED` or `REJECTED`, then this parameter will contain the source address. In any other case, this parameter will be empty." + }, + "tag": { + "type": "string", + "description": "Source address tag for XRP, used as memo for EOS/XLM, or Bank Transfer Description for the fiat provider BLINC (by BCB Group)." + }, + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destinations": { + "type": "array", + "description": "The transaction’s destinations.\n**Note:** In case the transaction is sent to a single destination, the `destination` parameter is used instead of this.", + "items": { + "type": "object", + "properties": { + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destinationAddress": { + "description": "Address where the asset was transferred." + }, + "destinationAddressDescription": { + "description": "Description of the address." + }, + "amount": { + "type": "string", + "description": "The amount to be sent to this destination." + }, + "amountUSD": { + "type": "string", + "description": "The USD value of the requested amount." + }, + "amlScreeningResult": { + "type": "object", + "description": "The result of the AML screening.", + "properties": { + "provider": { + "type": "string" + }, + "payload": { + "type": "object" + } + } + }, + "customerRefId": { + "description": "The ID for AML providers to associate the owner of funds with transactions." + }, + "authorizationInfo": { + "type": "object", + "description": "The information about your [Transaction Authorization Policy (TAP).](https://developers.fireblocks.com/docs/capabilities#transaction-authorization-policy-tap)", + "properties": { + "allowOperatorAsAuthorizer": { + "type": "boolean" + }, + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "th": { + "type": "number" + }, + "users": { + "type": "object", + "additionalProperties": { + "type": "string", + "enum": [ + "PENDING_AUTHORIZATION", + "APPROVED", + "REJECTED", + "NA" + ] + } + } + } + } + } + } + } + } + } + }, + "destinationAddress": { + "type": "string", + "description": "Address where the asset were transferred.\nNotes:\n - For [Multi destination transactions](https://support.fireblocks.io/hc/en-us/articles/360018447980-Multi-destination-transactions), this parameter will be empty. In this case, you should refer to the destinations field.\n - If the status is `CONFIRMING`, `COMPLETED`, or has been `CONFIRMING`; then moved forward to `FAILED` or `REJECTED`, then this parameter will contain the destination address. In any other case, this parameter will be empty." + }, + "destinationAddressDescription": { + "type": "string", + "description": "Description of the address." + }, + "destinationTag": { + "type": "string", + "description": "Destination address tag for XRP, used as memo for EOS/XLM, or Bank Transfer Description for the fiat provider BLINC (by BCB Group)." + }, + "contractCallDecodedData": { + "description": "Decoded data for `CONTRACT_CALL` operations. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for setting this parameter's value.", + "type": "object", + "properties": { + "contractName": { + "type": "string" + }, + "functionCalls": { + "type": "array", + "items": { + "type": "object" + } + } + } + }, + "amountInfo": { + "type": "object", + "description": "The details of the requested amount to transfer.", + "properties": { + "amount": { + "description": "If the transfer is a withdrawal from an exchange, the actual amount that was requested to be transferred. Otherwise, the requested amount.", + "type": "string" + }, + "requestedAmount": { + "description": "The amount requested by the user.", + "type": "string" + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction.", + "type": "string" + }, + "amountUSD": { + "description": "The USD value of the requested amount.", + "type": "string" + } + } + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "For transactions initiated via this Fireblocks workspace, when set to `true`, the fee is deducted from the requested amount.\n\n**Note**: This parameter can only be considered if a transaction's asset is a base asset, such as ETH or MATIC. If the asset can't be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account." + }, + "feeInfo": { + "type": "object", + "description": "Details of the transaction's fee.", + "properties": { + "networkFee": { + "description": "The fee paid to the network", + "type": "string" + }, + "serviceFee": { + "description": "The total fee deducted by the exchange from the actual requested amount (serviceFee = amount - netAmount)", + "type": "string" + }, + "gasPrice": { + "type": "string" + } + } + }, + "feeCurrency": { + "type": "string", + "description": "The asset which was withdrawn to pay the transaction fee, for example ETH for EVM-based blockchains, BTC for Tether Omni." + }, + "networkRecords": { + "type": "array", + "description": "In case a single transaction resulted with multiple transfers, for example a result of a contract call, then this parameter specifies each transfer that took place on the blockchain. In case of a single transfer transaction, this parameter is empty.", + "items": { + "type": "object", + "properties": { + "source": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name. In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "txHash": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset" + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction", + "type": "string" + }, + "isDropped": { + "type": "boolean" + }, + "type": { + "type": "string" + }, + "destinationAddress": { + "type": "string" + }, + "sourceAddress": { + "type": "string" + }, + "amountUSD": { + "type": "string" + }, + "index": { + "type": "number" + }, + "rewardInfo": { + "type": "object", + "description": "This field is relevant only for Algorand transactions. Both `srcRewards` and `destRewards` will appear only for Vault to Vault transactions, otherwise you will receive only the Fireblocks’ side of the transaction.", + "properties": { + "srcRewards": { + "type": "string" + }, + "destRewards": { + "type": "string" + } + } + } + } + } + }, + "createdAt": { + "type": "number", + "description": "The transaction’s creation date and time, in unix timestamp." + }, + "lastUpdated": { + "type": "number", + "description": "The transaction’s last update date and time, in unix timestamp." + }, + "createdBy": { + "type": "string", + "description": "User ID of the initiator of the transaction." + }, + "signedBy": { + "type": "array", + "description": "User ID’s of the signers of the transaction.", + "items": { + "type": "string" + } + }, + "rejectedBy": { + "type": "string", + "description": "User ID of the user that rejected the transaction (in case it was rejected)." + }, + "authorizationInfo": { + "type": "object", + "description": "The information about your [Transaction Authorization Policy (TAP).](https://developers.fireblocks.com/docs/capabilities#transaction-authorization-policy-tap)", + "properties": { + "allowOperatorAsAuthorizer": { + "type": "boolean" + }, + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "th": { + "type": "number" + }, + "users": { + "type": "object", + "additionalProperties": { + "type": "string", + "enum": [ + "PENDING_AUTHORIZATION", + "APPROVED", + "REJECTED", + "NA" + ] + } + } + } + } + } + } + }, + "exchangeTxId": { + "type": "string", + "description": "If the transaction originated from an exchange, this is the ID of this transaction at the exchange." + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions." + }, + "amlScreeningResult": { + "type": "object", + "description": "The result of the AML screening.", + "properties": { + "provider": { + "type": "string" + }, + "payload": { + "type": "object" + } + } + }, + "extraParameters": { + "type": "object", + "properties": {}, + "description": "Additional protocol / operation specific key-value parameters:\n\nFor UTXO-based blockchain input selection, add the key `inputsSelection` with the value set the [input selection structure.](https://developers.fireblocks.com/reference/transaction-objects#inputsselection) The inputs can be retrieved from the [Retrieve Unspent Inputs endpoint.](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid-assetid-unspent-inputs)\n\nFor `RAW` operations, add the key `rawMessageData` with the value set to the [raw message data structure.](https://developers.fireblocks.com/reference/raw-signing-objects#rawmessagedata)\n\nFor `CONTRACT_CALL` operations, add the key `contractCallData` with the value set to the Ethereum smart contract Application Binary Interface (ABI) payload. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n" + }, + "signedMessages": { + "type": "object", + "description": "A list of signed messages returned for raw signing.", + "properties": { + "content": { + "type": "string" + }, + "algorithm": { + "type": "string", + "enum": [ + "MPC_ECDSA_SECP256K1", + "MPC_EDDSA_ED25519" + ] + }, + "derivationPath": { + "type": "array", + "items": { + "type": "number" + } + }, + "signature": { + "type": "object", + "properties": { + "fullSig": { + "type": "string" + }, + "r": { + "type": "string" + }, + "s": { + "type": "string" + }, + "v": { + "type": "number" + } + } + }, + "publicKey": { + "type": "string" + } + } + }, + "numOfConfirmations": { + "type": "number", + "description": "The number of confirmations of the transaction. The number will increase until the transaction will be considered completed according to the confirmation policy." + }, + "blockInfo": { + "type": "object", + "description": "The block hash and height of the block that this transaction was mined in.\n **Note**: If an outgoing transaction uses the destinations object with more than one value in the array, blockHash is set to null.", + "properties": { + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + } + } + }, + "index": { + "type": "number", + "description": "For UTXO based assets this is the vOut, for Ethereum based, this is the index of the event of the contract call.\n **Note:** This field is not returned if a transaction uses the `destinations` object with more than one value." + }, + "rewardInfo": { + "type": "object", + "description": "This field is relevant only for Algorand transactions. Both `srcRewards` and `destRewards` will appear only for Vault to Vault transactions, otherwise you will receive only the Fireblocks’ side of the transaction.", + "properties": { + "srcRewards": { + "type": "string" + }, + "destRewards": { + "type": "string" + } + } + }, + "systemMessages": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "WARN", + "BLOCK" + ] + }, + "message": { + "type": "string", + "description": "A response from Fireblocks that communicates a message about the health of the process being performed. If this object is returned with data, you should expect potential delays or incomplete transaction statuses.", + "example": "Slow transaction processing. Outgoing transactions might be stuck." + } + } + }, + "addressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME" + ] + }, + "requestedAmount": { + "description": "The amount requested by the user. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "amount": { + "description": "If the transfer is a withdrawal from an exchange, the actual amount that was requested to be transferred. Otherwise, the requested amount. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "amountUSD": { + "description": "The USD value of the requested amount. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "nullable": true, + "deprecated": true + }, + "serviceFee": { + "description": "The total fee deducted by the exchange from the actual requested amount (`serviceFee` = `amount` - `netAmount`). Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "fee": { + "description": "Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "networkFee": { + "description": "The fee paid to the network. Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + } + } + } + }, + "description": "List transaction history.\n\nLists the transaction history for your workspace." + }, + { + "method": "post", + "path": "/transactions", + "name": "transactions_post", + "parameters": [ + { + "type": "object", + "properties": { + "operation": { + "type": "string", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE" + ], + "description": "* `TRANSFER` - The default value for an operation. Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, to describe the transaction at your Fireblocks workspace.", + "example": "Ticket 123" + }, + "externalTxId": { + "type": "string", + "description": "An optional but highly recommended parameter. Fireblocks will reject future transactions with same ID. \n \nYou should set this to a unique ID representing the transaction, to avoid submitting the same transaction twice. This helps with cases where submitting the transaction responds with an error code due to Internet interruptions, but the transaction was actually sent and processed. To validate whether a transaction has been processed, [Find a specific transaction by external transaction ID](https://developers.fireblocks.com/reference/get_transactions-external-tx-id-externaltxid).\n \nThere is no specific format required for this parameter.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT` or `BURN` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset", + "example": "ETH" + }, + "source": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT", + "COMPOUND", + "GAS_STATION", + "ONE_TIME_ADDRESS", + "UNKNOWN", + "END_USER_WALLET" + ] + }, + "subType": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "BLINC", + "BYBIT", + "CIRCLE", + "COINBASEEXCHANGE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "GEMINI", + "HITBTC", + "HUOBI", + "INDEPENDENTRESERVE", + "KORBIT", + "KRAKEN", + "KRAKENINTL", + "KUCOIN", + "LIQUID", + "OKCOIN", + "OKEX", + "PAXOS", + "POLONIEX", + "External", + "Internal" + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "walletId": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "type" + ] + }, + "destination": {}, + "destinations": { + "type": "array", + "description": "For UTXO based blockchains, you can send a single transaction to multiple destinations.", + "items": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "destination": {} + } + } + }, + "amount": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "0.02" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 0.02 + } + ], + "description": "For `TRANSFER` operations, the requested amount to transfer, in the asset’s unit. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "\"When set to `true`, the fee will be deducted from the requested amount.\"\n\n**Note**: This parameter can only be considered if a transaction’s asset is a base asset, such as ETH or MATIC. If the asset can’t be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account." + }, + "forceSweep": { + "type": "boolean", + "description": "For Polkadot, Kusama and Westend transactions only. When set to true, Fireblocks will empty the asset wallet.\n\n **Note:** If set to true when the source account is exactly 1 DOT, the transaction will fail. Any amount more or less than 1 DOT succeeds. This is a Polkadot blockchain limitation." + }, + "feeLevel": { + "type": "string", + "enum": [ + "LOW", + "MEDIUM", + "HIGH" + ], + "description": "For UTXO or EVM-based blockchains only. Defines the blockchain fee level which will be payed for the transaction. Alternatively, specific fee estimation parameters exist below." + }, + "fee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For UTXO-based blockchains, the fee per bytes in the asset’s smallest unit (Satoshi, Latoshi, etc.). For Ripple, the fee for the transaction. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "priorityFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "2" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 2 + } + ], + "description": "For Ethereum-based blockchains only, the fee for EIP-1559 transaction pricing mechanism. Value is in Gwei. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "failOnLowFee": { + "type": "boolean", + "description": "When set to `true`, in case the current `MEDIUM` fee level is higher than the one specified in the transaction, the transaction will fail to avoid getting stuck with no confirmations." + }, + "maxFee": { + "description": "The maximum fee (gas price or fee per byte) that should be payed for the transaction. In case the current value of the requested `feeLevel` is higher than this requested maximum fee. Represented by a numeric string for accurate precision.", + "type": "string", + "example": "120" + }, + "gasLimit": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "21000" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 21000 + } + ], + "description": "For EVM-based blockchains only. Units of gas required to process the transaction. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "gasPrice": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For non-EIP-1559, EVM-based transactions. Price per gas unit (in Ethereum this is specified in Gwei). Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "networkFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For EVM-based blockchains only. The total transaction fee in the blockchain’s largest unit. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated. - The transaction blockchain fee.\n- For Ethereum, you can't pass gasPrice, gasLimit and networkFee all together.\n- A numeric value representation is required." + }, + "replaceTxByHash": { + "type": "string", + "description": "For EVM-based blockchains only. In case a transaction is stuck, specify the hash of the stuck transaction to replace it by this transaction with a higher fee, or to replace it with this transaction with a zero fee and drop it from the blockchain.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "extraParameters": { + "type": "object", + "properties": {}, + "description": "Additional protocol / operation specific key-value parameters:\n\nFor UTXO-based blockchain input selection, add the key `inputsSelection` with the value set the [input selection structure.](https://developers.fireblocks.com/reference/transaction-objects#inputsselection) The inputs can be retrieved from the [Retrieve Unspent Inputs endpoint.](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid-assetid-unspent-inputs)\n\nFor `RAW` operations, add the key `rawMessageData` with the value set to the [raw message data structure.](https://developers.fireblocks.com/reference/raw-signing-objects#rawmessagedata)\n\nFor `CONTRACT_CALL` operations, add the key `contractCallData` with the value set to the Ethereum smart contract Application Binary Interface (ABI) payload. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n" + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions.", + "example": "abcdef" + }, + "autoStaking": { + "type": "boolean", + "description": "This feature is no longer supported." + }, + "networkStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + }, + "cpuStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the transaction." + }, + "status": { + "type": "string", + "description": "The primary status of the transaction. For details, see [Primary transaction statuses.] (https://developers.fireblocks.com/reference/primary-transaction-statuses)" + }, + "systemMessages": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "WARN", + "BLOCK" + ] + }, + "message": { + "type": "string", + "description": "A response from Fireblocks that communicates a message about the health of the process being performed. If this object is returned with data, you should expect potential delays or incomplete transaction statuses.", + "example": "Slow transaction processing. Outgoing transactions might be stuck." + } + } + } + } + }, + "description": "Create a new transaction.\n\nCreates a new transaction." + }, + { + "method": "post", + "path": "/transactions/estimate_fee", + "name": "transactions_estimate_fee_post", + "parameters": [ + { + "type": "object", + "properties": { + "operation": { + "type": "string", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE" + ], + "description": "* `TRANSFER` - The default value for an operation. Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, to describe the transaction at your Fireblocks workspace.", + "example": "Ticket 123" + }, + "externalTxId": { + "type": "string", + "description": "An optional but highly recommended parameter. Fireblocks will reject future transactions with same ID. \n \nYou should set this to a unique ID representing the transaction, to avoid submitting the same transaction twice. This helps with cases where submitting the transaction responds with an error code due to Internet interruptions, but the transaction was actually sent and processed. To validate whether a transaction has been processed, [Find a specific transaction by external transaction ID](https://developers.fireblocks.com/reference/get_transactions-external-tx-id-externaltxid).\n \nThere is no specific format required for this parameter.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT` or `BURN` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset", + "example": "ETH" + }, + "source": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT", + "COMPOUND", + "GAS_STATION", + "ONE_TIME_ADDRESS", + "UNKNOWN", + "END_USER_WALLET" + ] + }, + "subType": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "BLINC", + "BYBIT", + "CIRCLE", + "COINBASEEXCHANGE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "GEMINI", + "HITBTC", + "HUOBI", + "INDEPENDENTRESERVE", + "KORBIT", + "KRAKEN", + "KRAKENINTL", + "KUCOIN", + "LIQUID", + "OKCOIN", + "OKEX", + "PAXOS", + "POLONIEX", + "External", + "Internal" + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "walletId": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "type" + ] + }, + "destination": {}, + "destinations": { + "type": "array", + "description": "For UTXO based blockchains, you can send a single transaction to multiple destinations.", + "items": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "destination": {} + } + } + }, + "amount": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "0.02" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 0.02 + } + ], + "description": "For `TRANSFER` operations, the requested amount to transfer, in the asset’s unit. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "\"When set to `true`, the fee will be deducted from the requested amount.\"\n\n**Note**: This parameter can only be considered if a transaction’s asset is a base asset, such as ETH or MATIC. If the asset can’t be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account." + }, + "forceSweep": { + "type": "boolean", + "description": "For Polkadot, Kusama and Westend transactions only. When set to true, Fireblocks will empty the asset wallet.\n\n **Note:** If set to true when the source account is exactly 1 DOT, the transaction will fail. Any amount more or less than 1 DOT succeeds. This is a Polkadot blockchain limitation." + }, + "feeLevel": { + "type": "string", + "enum": [ + "LOW", + "MEDIUM", + "HIGH" + ], + "description": "For UTXO or EVM-based blockchains only. Defines the blockchain fee level which will be payed for the transaction. Alternatively, specific fee estimation parameters exist below." + }, + "fee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For UTXO-based blockchains, the fee per bytes in the asset’s smallest unit (Satoshi, Latoshi, etc.). For Ripple, the fee for the transaction. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "priorityFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "2" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 2 + } + ], + "description": "For Ethereum-based blockchains only, the fee for EIP-1559 transaction pricing mechanism. Value is in Gwei. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "failOnLowFee": { + "type": "boolean", + "description": "When set to `true`, in case the current `MEDIUM` fee level is higher than the one specified in the transaction, the transaction will fail to avoid getting stuck with no confirmations." + }, + "maxFee": { + "description": "The maximum fee (gas price or fee per byte) that should be payed for the transaction. In case the current value of the requested `feeLevel` is higher than this requested maximum fee. Represented by a numeric string for accurate precision.", + "type": "string", + "example": "120" + }, + "gasLimit": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "21000" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 21000 + } + ], + "description": "For EVM-based blockchains only. Units of gas required to process the transaction. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "gasPrice": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For non-EIP-1559, EVM-based transactions. Price per gas unit (in Ethereum this is specified in Gwei). Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "networkFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For EVM-based blockchains only. The total transaction fee in the blockchain’s largest unit. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated. - The transaction blockchain fee.\n- For Ethereum, you can't pass gasPrice, gasLimit and networkFee all together.\n- A numeric value representation is required." + }, + "replaceTxByHash": { + "type": "string", + "description": "For EVM-based blockchains only. In case a transaction is stuck, specify the hash of the stuck transaction to replace it by this transaction with a higher fee, or to replace it with this transaction with a zero fee and drop it from the blockchain.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "extraParameters": { + "type": "object", + "properties": {}, + "description": "Additional protocol / operation specific key-value parameters:\n\nFor UTXO-based blockchain input selection, add the key `inputsSelection` with the value set the [input selection structure.](https://developers.fireblocks.com/reference/transaction-objects#inputsselection) The inputs can be retrieved from the [Retrieve Unspent Inputs endpoint.](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid-assetid-unspent-inputs)\n\nFor `RAW` operations, add the key `rawMessageData` with the value set to the [raw message data structure.](https://developers.fireblocks.com/reference/raw-signing-objects#rawmessagedata)\n\nFor `CONTRACT_CALL` operations, add the key `contractCallData` with the value set to the Ethereum smart contract Application Binary Interface (ABI) payload. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n" + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions.", + "example": "abcdef" + }, + "autoStaking": { + "type": "boolean", + "description": "This feature is no longer supported." + }, + "networkStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + }, + "cpuStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "low": { + "type": "object", + "properties": { + "feePerByte": { + "type": "string" + }, + "gasPrice": { + "type": "string" + }, + "gasLimit": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "baseFee": { + "description": "(optional) Base Fee according to EIP-1559 (ETH assets)", + "type": "string" + }, + "priorityFee": { + "description": "(optional) Priority Fee according to EIP-1559 (ETH assets)", + "type": "string" + } + } + }, + "medium": { + "type": "object", + "properties": { + "feePerByte": { + "type": "string" + }, + "gasPrice": { + "type": "string" + }, + "gasLimit": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "baseFee": { + "description": "(optional) Base Fee according to EIP-1559 (ETH assets)", + "type": "string" + }, + "priorityFee": { + "description": "(optional) Priority Fee according to EIP-1559 (ETH assets)", + "type": "string" + } + } + }, + "high": { + "type": "object", + "properties": { + "feePerByte": { + "type": "string" + }, + "gasPrice": { + "type": "string" + }, + "gasLimit": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "baseFee": { + "description": "(optional) Base Fee according to EIP-1559 (ETH assets)", + "type": "string" + }, + "priorityFee": { + "description": "(optional) Priority Fee according to EIP-1559 (ETH assets)", + "type": "string" + } + } + } + }, + "required": [ + "low", + "medium", + "high" + ] + }, + "description": "Estimate transaction fee.\n\nEstimates the transaction fee for a transaction request.\n* Note: Supports all Fireblocks assets except ZCash (ZEC)." + }, + { + "method": "get", + "path": "/transactions/{txId}", + "name": "transactions_getByTxid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the transaction to return" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the transaction." + }, + "externalTxId": { + "type": "string", + "description": "Unique transaction ID provided by the user. Fireblocks highly recommends setting an `externalTxId` for every transaction created, to avoid submitting the same transaction twice." + }, + "status": { + "type": "string", + "description": "The primary status of the transaction. For details, see [Primary transaction statuses](https://developers.fireblocks.com/reference/primary-transaction-statuses)." + }, + "subStatus": { + "type": "string", + "description": "See [Transaction substatuses](https://developers.fireblocks.com/reference/transaction-substatuses) for the list of transaction sub statuses." + }, + "txHash": { + "type": "string", + "description": "The hash of the transaction on the blockchain.\n * This parameter exists if at least one of the following conditions is met:\n\n 1. The transaction’s source type is `UNKNOWN`, `WHITELISTED_ADDRESS`, `NETWORK_CONNECTION`, `ONE_TIME_ADDRESS`, `FIAT_ACCOUNT` or `GAS_STATION`.\n\n 2. The transaction’s source type is `VAULT` and the status is either: `CONFIRMING`, `COMPLETED`, or was in any of these statuses prior to changing to `FAILED` or `REJECTED`. In some instances, transactions in status `BROADCASTING` will include the txHash as well.\n\n 3. The transaction’s source type is `EXCHANGE_ACCOUNT` and the transaction’s destination type is `VAULT`, and the status is either: `CONFIRMING`, `COMPLETED`, or was in any of these status prior to changing to `FAILED`.\n \n\n* In addition, the following conditions must be met:\n\n 1. The asset is a crypto asset (not fiat).\n\n 2. The transaction operation is not RAW or `TYPED_MESSAGE`." + }, + "operation": { + "type": "string", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE", + "ENABLE_ASSET", + "STAKE", + "UNSTAKE", + "WITHDRAW", + "REDEEM_FROM_COMPOUND", + "SUPPLY_TO_COMPOUND" + ], + "description": "* `TRANSFER` - Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n* `ENABLE_ASSET` - Algorand, DigitalBits, Solana, and Stellar require an on-chain transaction to create an asset wallet and enable the deposit address. This transaction is automatically created when adding assets on these blockchains at a vault account.\n* `STAKE` - Assign assets to a staking pool managed by a staking validator. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n* `UNSTAKE` - Remove assets from a staking pool managed by a staking validator. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n* `WITHDRAW` - Transfer assets from a dedicated staking vault account to another address. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n\n **Note:** Fireblocks will rename this type from `WITHDRAW` to a different type name soon. There will be a 7-day notice regarding the new type name.\n\n* `SUPPLY_TO_COMPOUND` - Deprecated since April 1st, 2023. Older transactions may have this as their operation, in case users in the workspace have used the direct integration between Fireblocks and the Compound DeFI protocol.\n* `REDEEM_FROM_COMPOUND` - Deprecated since April 1st, 2023. Older transactions may have this as their operation, in case users in the workspace have used the direct integration between Fireblocks and the Compound DeFI protocol.\n" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, that describes the transaction at your Fireblocks workspace." + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT`, `BURN`, `ENABLE_ASSET`,`STAKE` ,`UNSTAKE` or `WITHDRAW` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset" + }, + "source": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name. In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "sourceAddress": { + "type": "string", + "description": "For account based assets only, the source address of the transaction.\n**Note:** If the status is `CONFIRMING`, `COMPLETED`, or has been `CONFIRMING`; then moved forward to `FAILED` or `REJECTED`, then this parameter will contain the source address. In any other case, this parameter will be empty." + }, + "tag": { + "type": "string", + "description": "Source address tag for XRP, used as memo for EOS/XLM, or Bank Transfer Description for the fiat provider BLINC (by BCB Group)." + }, + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destinations": { + "type": "array", + "description": "The transaction’s destinations.\n**Note:** In case the transaction is sent to a single destination, the `destination` parameter is used instead of this.", + "items": { + "type": "object", + "properties": { + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destinationAddress": { + "description": "Address where the asset was transferred." + }, + "destinationAddressDescription": { + "description": "Description of the address." + }, + "amount": { + "type": "string", + "description": "The amount to be sent to this destination." + }, + "amountUSD": { + "type": "string", + "description": "The USD value of the requested amount." + }, + "amlScreeningResult": { + "type": "object", + "description": "The result of the AML screening.", + "properties": { + "provider": { + "type": "string" + }, + "payload": { + "type": "object" + } + } + }, + "customerRefId": { + "description": "The ID for AML providers to associate the owner of funds with transactions." + }, + "authorizationInfo": { + "type": "object", + "description": "The information about your [Transaction Authorization Policy (TAP).](https://developers.fireblocks.com/docs/capabilities#transaction-authorization-policy-tap)", + "properties": { + "allowOperatorAsAuthorizer": { + "type": "boolean" + }, + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "th": { + "type": "number" + }, + "users": { + "type": "object", + "additionalProperties": { + "type": "string", + "enum": [ + "PENDING_AUTHORIZATION", + "APPROVED", + "REJECTED", + "NA" + ] + } + } + } + } + } + } + } + } + } + }, + "destinationAddress": { + "type": "string", + "description": "Address where the asset were transferred.\nNotes:\n - For [Multi destination transactions](https://support.fireblocks.io/hc/en-us/articles/360018447980-Multi-destination-transactions), this parameter will be empty. In this case, you should refer to the destinations field.\n - If the status is `CONFIRMING`, `COMPLETED`, or has been `CONFIRMING`; then moved forward to `FAILED` or `REJECTED`, then this parameter will contain the destination address. In any other case, this parameter will be empty." + }, + "destinationAddressDescription": { + "type": "string", + "description": "Description of the address." + }, + "destinationTag": { + "type": "string", + "description": "Destination address tag for XRP, used as memo for EOS/XLM, or Bank Transfer Description for the fiat provider BLINC (by BCB Group)." + }, + "contractCallDecodedData": { + "description": "Decoded data for `CONTRACT_CALL` operations. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for setting this parameter's value.", + "type": "object", + "properties": { + "contractName": { + "type": "string" + }, + "functionCalls": { + "type": "array", + "items": { + "type": "object" + } + } + } + }, + "amountInfo": { + "type": "object", + "description": "The details of the requested amount to transfer.", + "properties": { + "amount": { + "description": "If the transfer is a withdrawal from an exchange, the actual amount that was requested to be transferred. Otherwise, the requested amount.", + "type": "string" + }, + "requestedAmount": { + "description": "The amount requested by the user.", + "type": "string" + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction.", + "type": "string" + }, + "amountUSD": { + "description": "The USD value of the requested amount.", + "type": "string" + } + } + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "For transactions initiated via this Fireblocks workspace, when set to `true`, the fee is deducted from the requested amount.\n\n**Note**: This parameter can only be considered if a transaction's asset is a base asset, such as ETH or MATIC. If the asset can't be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account." + }, + "feeInfo": { + "type": "object", + "description": "Details of the transaction's fee.", + "properties": { + "networkFee": { + "description": "The fee paid to the network", + "type": "string" + }, + "serviceFee": { + "description": "The total fee deducted by the exchange from the actual requested amount (serviceFee = amount - netAmount)", + "type": "string" + }, + "gasPrice": { + "type": "string" + } + } + }, + "feeCurrency": { + "type": "string", + "description": "The asset which was withdrawn to pay the transaction fee, for example ETH for EVM-based blockchains, BTC for Tether Omni." + }, + "networkRecords": { + "type": "array", + "description": "In case a single transaction resulted with multiple transfers, for example a result of a contract call, then this parameter specifies each transfer that took place on the blockchain. In case of a single transfer transaction, this parameter is empty.", + "items": { + "type": "object", + "properties": { + "source": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name. In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "txHash": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset" + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction", + "type": "string" + }, + "isDropped": { + "type": "boolean" + }, + "type": { + "type": "string" + }, + "destinationAddress": { + "type": "string" + }, + "sourceAddress": { + "type": "string" + }, + "amountUSD": { + "type": "string" + }, + "index": { + "type": "number" + }, + "rewardInfo": { + "type": "object", + "description": "This field is relevant only for Algorand transactions. Both `srcRewards` and `destRewards` will appear only for Vault to Vault transactions, otherwise you will receive only the Fireblocks’ side of the transaction.", + "properties": { + "srcRewards": { + "type": "string" + }, + "destRewards": { + "type": "string" + } + } + } + } + } + }, + "createdAt": { + "type": "number", + "description": "The transaction’s creation date and time, in unix timestamp." + }, + "lastUpdated": { + "type": "number", + "description": "The transaction’s last update date and time, in unix timestamp." + }, + "createdBy": { + "type": "string", + "description": "User ID of the initiator of the transaction." + }, + "signedBy": { + "type": "array", + "description": "User ID’s of the signers of the transaction.", + "items": { + "type": "string" + } + }, + "rejectedBy": { + "type": "string", + "description": "User ID of the user that rejected the transaction (in case it was rejected)." + }, + "authorizationInfo": { + "type": "object", + "description": "The information about your [Transaction Authorization Policy (TAP).](https://developers.fireblocks.com/docs/capabilities#transaction-authorization-policy-tap)", + "properties": { + "allowOperatorAsAuthorizer": { + "type": "boolean" + }, + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "th": { + "type": "number" + }, + "users": { + "type": "object", + "additionalProperties": { + "type": "string", + "enum": [ + "PENDING_AUTHORIZATION", + "APPROVED", + "REJECTED", + "NA" + ] + } + } + } + } + } + } + }, + "exchangeTxId": { + "type": "string", + "description": "If the transaction originated from an exchange, this is the ID of this transaction at the exchange." + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions." + }, + "amlScreeningResult": { + "type": "object", + "description": "The result of the AML screening.", + "properties": { + "provider": { + "type": "string" + }, + "payload": { + "type": "object" + } + } + }, + "extraParameters": { + "type": "object", + "properties": {}, + "description": "Additional protocol / operation specific key-value parameters:\n\nFor UTXO-based blockchain input selection, add the key `inputsSelection` with the value set the [input selection structure.](https://developers.fireblocks.com/reference/transaction-objects#inputsselection) The inputs can be retrieved from the [Retrieve Unspent Inputs endpoint.](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid-assetid-unspent-inputs)\n\nFor `RAW` operations, add the key `rawMessageData` with the value set to the [raw message data structure.](https://developers.fireblocks.com/reference/raw-signing-objects#rawmessagedata)\n\nFor `CONTRACT_CALL` operations, add the key `contractCallData` with the value set to the Ethereum smart contract Application Binary Interface (ABI) payload. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n" + }, + "signedMessages": { + "type": "object", + "description": "A list of signed messages returned for raw signing.", + "properties": { + "content": { + "type": "string" + }, + "algorithm": { + "type": "string", + "enum": [ + "MPC_ECDSA_SECP256K1", + "MPC_EDDSA_ED25519" + ] + }, + "derivationPath": { + "type": "array", + "items": { + "type": "number" + } + }, + "signature": { + "type": "object", + "properties": { + "fullSig": { + "type": "string" + }, + "r": { + "type": "string" + }, + "s": { + "type": "string" + }, + "v": { + "type": "number" + } + } + }, + "publicKey": { + "type": "string" + } + } + }, + "numOfConfirmations": { + "type": "number", + "description": "The number of confirmations of the transaction. The number will increase until the transaction will be considered completed according to the confirmation policy." + }, + "blockInfo": { + "type": "object", + "description": "The block hash and height of the block that this transaction was mined in.\n **Note**: If an outgoing transaction uses the destinations object with more than one value in the array, blockHash is set to null.", + "properties": { + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + } + } + }, + "index": { + "type": "number", + "description": "For UTXO based assets this is the vOut, for Ethereum based, this is the index of the event of the contract call.\n **Note:** This field is not returned if a transaction uses the `destinations` object with more than one value." + }, + "rewardInfo": { + "type": "object", + "description": "This field is relevant only for Algorand transactions. Both `srcRewards` and `destRewards` will appear only for Vault to Vault transactions, otherwise you will receive only the Fireblocks’ side of the transaction.", + "properties": { + "srcRewards": { + "type": "string" + }, + "destRewards": { + "type": "string" + } + } + }, + "systemMessages": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "WARN", + "BLOCK" + ] + }, + "message": { + "type": "string", + "description": "A response from Fireblocks that communicates a message about the health of the process being performed. If this object is returned with data, you should expect potential delays or incomplete transaction statuses.", + "example": "Slow transaction processing. Outgoing transactions might be stuck." + } + } + }, + "addressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME" + ] + }, + "requestedAmount": { + "description": "The amount requested by the user. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "amount": { + "description": "If the transfer is a withdrawal from an exchange, the actual amount that was requested to be transferred. Otherwise, the requested amount. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "amountUSD": { + "description": "The USD value of the requested amount. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "nullable": true, + "deprecated": true + }, + "serviceFee": { + "description": "The total fee deducted by the exchange from the actual requested amount (`serviceFee` = `amount` - `netAmount`). Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "fee": { + "description": "Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "networkFee": { + "description": "The fee paid to the network. Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + } + } + }, + "description": "Find a specific transaction by Fireblocks transaction ID.\n\nReturns a transaction by ID." + }, + { + "method": "get", + "path": "/transactions/external_tx_id/{externalTxId}/", + "name": "transactions_external_tx_id_getByExternaltxid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The external ID of the transaction to return" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the transaction." + }, + "externalTxId": { + "type": "string", + "description": "Unique transaction ID provided by the user. Fireblocks highly recommends setting an `externalTxId` for every transaction created, to avoid submitting the same transaction twice." + }, + "status": { + "type": "string", + "description": "The primary status of the transaction. For details, see [Primary transaction statuses](https://developers.fireblocks.com/reference/primary-transaction-statuses)." + }, + "subStatus": { + "type": "string", + "description": "See [Transaction substatuses](https://developers.fireblocks.com/reference/transaction-substatuses) for the list of transaction sub statuses." + }, + "txHash": { + "type": "string", + "description": "The hash of the transaction on the blockchain.\n * This parameter exists if at least one of the following conditions is met:\n\n 1. The transaction’s source type is `UNKNOWN`, `WHITELISTED_ADDRESS`, `NETWORK_CONNECTION`, `ONE_TIME_ADDRESS`, `FIAT_ACCOUNT` or `GAS_STATION`.\n\n 2. The transaction’s source type is `VAULT` and the status is either: `CONFIRMING`, `COMPLETED`, or was in any of these statuses prior to changing to `FAILED` or `REJECTED`. In some instances, transactions in status `BROADCASTING` will include the txHash as well.\n\n 3. The transaction’s source type is `EXCHANGE_ACCOUNT` and the transaction’s destination type is `VAULT`, and the status is either: `CONFIRMING`, `COMPLETED`, or was in any of these status prior to changing to `FAILED`.\n \n\n* In addition, the following conditions must be met:\n\n 1. The asset is a crypto asset (not fiat).\n\n 2. The transaction operation is not RAW or `TYPED_MESSAGE`." + }, + "operation": { + "type": "string", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE", + "ENABLE_ASSET", + "STAKE", + "UNSTAKE", + "WITHDRAW", + "REDEEM_FROM_COMPOUND", + "SUPPLY_TO_COMPOUND" + ], + "description": "* `TRANSFER` - Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n* `ENABLE_ASSET` - Algorand, DigitalBits, Solana, and Stellar require an on-chain transaction to create an asset wallet and enable the deposit address. This transaction is automatically created when adding assets on these blockchains at a vault account.\n* `STAKE` - Assign assets to a staking pool managed by a staking validator. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n* `UNSTAKE` - Remove assets from a staking pool managed by a staking validator. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n* `WITHDRAW` - Transfer assets from a dedicated staking vault account to another address. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n\n **Note:** Fireblocks will rename this type from `WITHDRAW` to a different type name soon. There will be a 7-day notice regarding the new type name.\n\n* `SUPPLY_TO_COMPOUND` - Deprecated since April 1st, 2023. Older transactions may have this as their operation, in case users in the workspace have used the direct integration between Fireblocks and the Compound DeFI protocol.\n* `REDEEM_FROM_COMPOUND` - Deprecated since April 1st, 2023. Older transactions may have this as their operation, in case users in the workspace have used the direct integration between Fireblocks and the Compound DeFI protocol.\n" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, that describes the transaction at your Fireblocks workspace." + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT`, `BURN`, `ENABLE_ASSET`,`STAKE` ,`UNSTAKE` or `WITHDRAW` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset" + }, + "source": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name. In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "sourceAddress": { + "type": "string", + "description": "For account based assets only, the source address of the transaction.\n**Note:** If the status is `CONFIRMING`, `COMPLETED`, or has been `CONFIRMING`; then moved forward to `FAILED` or `REJECTED`, then this parameter will contain the source address. In any other case, this parameter will be empty." + }, + "tag": { + "type": "string", + "description": "Source address tag for XRP, used as memo for EOS/XLM, or Bank Transfer Description for the fiat provider BLINC (by BCB Group)." + }, + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destinations": { + "type": "array", + "description": "The transaction’s destinations.\n**Note:** In case the transaction is sent to a single destination, the `destination` parameter is used instead of this.", + "items": { + "type": "object", + "properties": { + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destinationAddress": { + "description": "Address where the asset was transferred." + }, + "destinationAddressDescription": { + "description": "Description of the address." + }, + "amount": { + "type": "string", + "description": "The amount to be sent to this destination." + }, + "amountUSD": { + "type": "string", + "description": "The USD value of the requested amount." + }, + "amlScreeningResult": { + "type": "object", + "description": "The result of the AML screening.", + "properties": { + "provider": { + "type": "string" + }, + "payload": { + "type": "object" + } + } + }, + "customerRefId": { + "description": "The ID for AML providers to associate the owner of funds with transactions." + }, + "authorizationInfo": { + "type": "object", + "description": "The information about your [Transaction Authorization Policy (TAP).](https://developers.fireblocks.com/docs/capabilities#transaction-authorization-policy-tap)", + "properties": { + "allowOperatorAsAuthorizer": { + "type": "boolean" + }, + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "th": { + "type": "number" + }, + "users": { + "type": "object", + "additionalProperties": { + "type": "string", + "enum": [ + "PENDING_AUTHORIZATION", + "APPROVED", + "REJECTED", + "NA" + ] + } + } + } + } + } + } + } + } + } + }, + "destinationAddress": { + "type": "string", + "description": "Address where the asset were transferred.\nNotes:\n - For [Multi destination transactions](https://support.fireblocks.io/hc/en-us/articles/360018447980-Multi-destination-transactions), this parameter will be empty. In this case, you should refer to the destinations field.\n - If the status is `CONFIRMING`, `COMPLETED`, or has been `CONFIRMING`; then moved forward to `FAILED` or `REJECTED`, then this parameter will contain the destination address. In any other case, this parameter will be empty." + }, + "destinationAddressDescription": { + "type": "string", + "description": "Description of the address." + }, + "destinationTag": { + "type": "string", + "description": "Destination address tag for XRP, used as memo for EOS/XLM, or Bank Transfer Description for the fiat provider BLINC (by BCB Group)." + }, + "contractCallDecodedData": { + "description": "Decoded data for `CONTRACT_CALL` operations. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for setting this parameter's value.", + "type": "object", + "properties": { + "contractName": { + "type": "string" + }, + "functionCalls": { + "type": "array", + "items": { + "type": "object" + } + } + } + }, + "amountInfo": { + "type": "object", + "description": "The details of the requested amount to transfer.", + "properties": { + "amount": { + "description": "If the transfer is a withdrawal from an exchange, the actual amount that was requested to be transferred. Otherwise, the requested amount.", + "type": "string" + }, + "requestedAmount": { + "description": "The amount requested by the user.", + "type": "string" + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction.", + "type": "string" + }, + "amountUSD": { + "description": "The USD value of the requested amount.", + "type": "string" + } + } + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "For transactions initiated via this Fireblocks workspace, when set to `true`, the fee is deducted from the requested amount.\n\n**Note**: This parameter can only be considered if a transaction's asset is a base asset, such as ETH or MATIC. If the asset can't be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account." + }, + "feeInfo": { + "type": "object", + "description": "Details of the transaction's fee.", + "properties": { + "networkFee": { + "description": "The fee paid to the network", + "type": "string" + }, + "serviceFee": { + "description": "The total fee deducted by the exchange from the actual requested amount (serviceFee = amount - netAmount)", + "type": "string" + }, + "gasPrice": { + "type": "string" + } + } + }, + "feeCurrency": { + "type": "string", + "description": "The asset which was withdrawn to pay the transaction fee, for example ETH for EVM-based blockchains, BTC for Tether Omni." + }, + "networkRecords": { + "type": "array", + "description": "In case a single transaction resulted with multiple transfers, for example a result of a contract call, then this parameter specifies each transfer that took place on the blockchain. In case of a single transfer transaction, this parameter is empty.", + "items": { + "type": "object", + "properties": { + "source": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name. In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "destination": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + }, + "walletId": { + "type": "string", + "format": "uuid" + } + } + }, + "txHash": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset" + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction", + "type": "string" + }, + "isDropped": { + "type": "boolean" + }, + "type": { + "type": "string" + }, + "destinationAddress": { + "type": "string" + }, + "sourceAddress": { + "type": "string" + }, + "amountUSD": { + "type": "string" + }, + "index": { + "type": "number" + }, + "rewardInfo": { + "type": "object", + "description": "This field is relevant only for Algorand transactions. Both `srcRewards` and `destRewards` will appear only for Vault to Vault transactions, otherwise you will receive only the Fireblocks’ side of the transaction.", + "properties": { + "srcRewards": { + "type": "string" + }, + "destRewards": { + "type": "string" + } + } + } + } + } + }, + "createdAt": { + "type": "number", + "description": "The transaction’s creation date and time, in unix timestamp." + }, + "lastUpdated": { + "type": "number", + "description": "The transaction’s last update date and time, in unix timestamp." + }, + "createdBy": { + "type": "string", + "description": "User ID of the initiator of the transaction." + }, + "signedBy": { + "type": "array", + "description": "User ID’s of the signers of the transaction.", + "items": { + "type": "string" + } + }, + "rejectedBy": { + "type": "string", + "description": "User ID of the user that rejected the transaction (in case it was rejected)." + }, + "authorizationInfo": { + "type": "object", + "description": "The information about your [Transaction Authorization Policy (TAP).](https://developers.fireblocks.com/docs/capabilities#transaction-authorization-policy-tap)", + "properties": { + "allowOperatorAsAuthorizer": { + "type": "boolean" + }, + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "th": { + "type": "number" + }, + "users": { + "type": "object", + "additionalProperties": { + "type": "string", + "enum": [ + "PENDING_AUTHORIZATION", + "APPROVED", + "REJECTED", + "NA" + ] + } + } + } + } + } + } + }, + "exchangeTxId": { + "type": "string", + "description": "If the transaction originated from an exchange, this is the ID of this transaction at the exchange." + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions." + }, + "amlScreeningResult": { + "type": "object", + "description": "The result of the AML screening.", + "properties": { + "provider": { + "type": "string" + }, + "payload": { + "type": "object" + } + } + }, + "extraParameters": { + "type": "object", + "properties": {}, + "description": "Additional protocol / operation specific key-value parameters:\n\nFor UTXO-based blockchain input selection, add the key `inputsSelection` with the value set the [input selection structure.](https://developers.fireblocks.com/reference/transaction-objects#inputsselection) The inputs can be retrieved from the [Retrieve Unspent Inputs endpoint.](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid-assetid-unspent-inputs)\n\nFor `RAW` operations, add the key `rawMessageData` with the value set to the [raw message data structure.](https://developers.fireblocks.com/reference/raw-signing-objects#rawmessagedata)\n\nFor `CONTRACT_CALL` operations, add the key `contractCallData` with the value set to the Ethereum smart contract Application Binary Interface (ABI) payload. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n" + }, + "signedMessages": { + "type": "object", + "description": "A list of signed messages returned for raw signing.", + "properties": { + "content": { + "type": "string" + }, + "algorithm": { + "type": "string", + "enum": [ + "MPC_ECDSA_SECP256K1", + "MPC_EDDSA_ED25519" + ] + }, + "derivationPath": { + "type": "array", + "items": { + "type": "number" + } + }, + "signature": { + "type": "object", + "properties": { + "fullSig": { + "type": "string" + }, + "r": { + "type": "string" + }, + "s": { + "type": "string" + }, + "v": { + "type": "number" + } + } + }, + "publicKey": { + "type": "string" + } + } + }, + "numOfConfirmations": { + "type": "number", + "description": "The number of confirmations of the transaction. The number will increase until the transaction will be considered completed according to the confirmation policy." + }, + "blockInfo": { + "type": "object", + "description": "The block hash and height of the block that this transaction was mined in.\n **Note**: If an outgoing transaction uses the destinations object with more than one value in the array, blockHash is set to null.", + "properties": { + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + } + } + }, + "index": { + "type": "number", + "description": "For UTXO based assets this is the vOut, for Ethereum based, this is the index of the event of the contract call.\n **Note:** This field is not returned if a transaction uses the `destinations` object with more than one value." + }, + "rewardInfo": { + "type": "object", + "description": "This field is relevant only for Algorand transactions. Both `srcRewards` and `destRewards` will appear only for Vault to Vault transactions, otherwise you will receive only the Fireblocks’ side of the transaction.", + "properties": { + "srcRewards": { + "type": "string" + }, + "destRewards": { + "type": "string" + } + } + }, + "systemMessages": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "WARN", + "BLOCK" + ] + }, + "message": { + "type": "string", + "description": "A response from Fireblocks that communicates a message about the health of the process being performed. If this object is returned with data, you should expect potential delays or incomplete transaction statuses.", + "example": "Slow transaction processing. Outgoing transactions might be stuck." + } + } + }, + "addressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME" + ] + }, + "requestedAmount": { + "description": "The amount requested by the user. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "amount": { + "description": "If the transfer is a withdrawal from an exchange, the actual amount that was requested to be transferred. Otherwise, the requested amount. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "amountUSD": { + "description": "The USD value of the requested amount. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "nullable": true, + "deprecated": true + }, + "serviceFee": { + "description": "The total fee deducted by the exchange from the actual requested amount (`serviceFee` = `amount` - `netAmount`). Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "fee": { + "description": "Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "networkFee": { + "description": "The fee paid to the network. Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + } + } + }, + "description": "Find a specific transaction by external transaction ID.\n\nReturns transaction by external transaction ID." + }, + { + "method": "post", + "path": "/transactions/{txId}/set_confirmation_threshold", + "name": "transactions_set_confirmation_threshold_postByTxid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the transaction" + }, + { + "type": "object", + "properties": { + "numOfConfirmations": { + "type": "number" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "transactions": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "Set confirmation threshold by transaction ID.\n\nOverrides the required number of confirmations for transaction completion by transaction ID." + }, + { + "method": "post", + "path": "/transactions/{txId}/drop", + "name": "transactions_drop_postByTxid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the transaction" + }, + { + "type": "object", + "properties": { + "txId": { + "type": "string" + }, + "feeLevel": { + "type": "string" + }, + "gasPrice": { + "type": "string" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "transactions": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "Drop ETH transaction by ID.\n\nDrops a stuck ETH transaction and creates a replacement transaction." + }, + { + "method": "post", + "path": "/transactions/{txId}/cancel", + "name": "transactions_cancel_postByTxid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the transaction to cancel" + } + ], + "output": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + } + } + }, + "description": "Cancel a transaction.\n\nCancels a transaction by ID." + }, + { + "method": "post", + "path": "/transactions/{txId}/freeze", + "name": "transactions_freeze_postByTxid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the transaction to freeze" + } + ], + "output": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + } + } + }, + "description": "Freeze a transaction.\n\nFreezes a transaction by ID." + }, + { + "method": "post", + "path": "/transactions/{txId}/unfreeze", + "name": "transactions_unfreeze_postByTxid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the transaction to unfreeze" + } + ], + "output": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + } + } + }, + "description": "Unfreeze a transaction.\n\nUnfreezes a transaction by ID and makes the transaction available again." + }, + { + "method": "post", + "path": "/txHash/{txHash}/set_confirmation_threshold", + "name": "txHash_set_confirmation_threshold_postByTxhash", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The TxHash" + }, + { + "type": "object", + "properties": { + "numOfConfirmations": { + "type": "number" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "transactions": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "description": "Set confirmation threshold by transaction hash.\n\nOverrides the required number of confirmations for transaction completion by transaction hash." + }, + { + "method": "get", + "path": "/payments/xb-settlements/configs", + "name": "payments_xb_settlements_configs_get", + "parameters": [], + "output": { + "type": "object", + "properties": { + "configurations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "corridorId": { + "type": "string", + "enum": [ + "MX_US", + "CO_US", + "US_MX", + "US_EU", + "US_UK" + ], + "description": "- MX_US : Mexico (MXN) to USA (USD)\n- CO_US : Colombia (COP) to USA (USD)\n- US_MX : USA (USD) to Mexico (MXN)\n- US_EU : USA (USD) to Europe Union (EUR)\n- US_UK : USA (USD) to United Kingdon (GBP)\n" + }, + "name": { + "type": "string", + "description": "The name for the cross-border ettlement configuration" + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAssetId": {}, + "outputAssetId": {} + }, + "required": [ + "accountId" + ] + } + }, + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + }, + "createdAt": { + "type": "number", + "description": "The creation time in epoch format." + } + }, + "required": [ + "configId", + "name", + "corridorId", + "steps", + "conversionSlippageBasisPoints", + "createdAt" + ] + } + } + }, + "required": [ + "configurations" + ] + }, + "description": "Get all the cross-border settlement configurations.
\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "post", + "path": "/payments/xb-settlements/configs", + "name": "payments_xb_settlements_configs_post", + "parameters": [ + { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name for the cross-border settlement configuration" + }, + "corridorId": { + "type": "string", + "enum": [ + "MX_US", + "CO_US", + "US_MX", + "US_EU", + "US_UK" + ], + "description": "- MX_US : Mexico (MXN) to USA (USD)\n- CO_US : Colombia (COP) to USA (USD)\n- US_MX : USA (USD) to Mexico (MXN)\n- US_EU : USA (USD) to Europe Union (EUR)\n- US_UK : USA (USD) to United Kingdon (GBP)\n" + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAssetId": {}, + "outputAssetId": {} + }, + "required": [ + "accountId" + ] + } + }, + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + } + }, + "required": [ + "name", + "corridorId", + "steps" + ] + } + ], + "output": { + "type": "object", + "properties": { + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "corridorId": { + "type": "string", + "enum": [ + "MX_US", + "CO_US", + "US_MX", + "US_EU", + "US_UK" + ], + "description": "- MX_US : Mexico (MXN) to USA (USD)\n- CO_US : Colombia (COP) to USA (USD)\n- US_MX : USA (USD) to Mexico (MXN)\n- US_EU : USA (USD) to Europe Union (EUR)\n- US_UK : USA (USD) to United Kingdon (GBP)\n" + }, + "name": { + "type": "string", + "description": "The name for the cross-border ettlement configuration" + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAssetId": {}, + "outputAssetId": {} + }, + "required": [ + "accountId" + ] + } + }, + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + }, + "createdAt": { + "type": "number", + "description": "The creation time in epoch format." + } + }, + "required": [ + "configId", + "name", + "corridorId", + "steps", + "conversionSlippageBasisPoints", + "createdAt" + ] + }, + "description": "Create a new cross-border settlement configuration.\n\nCreate a new cross-border settlement configuration.
Configurations define the default assets, on-ramps, and off-ramps to use for the cross-border settlement.
\nA configuration must contain at least two steps - `ON_RAMP` and `VAULT_ACCOUNT`.
\nAll other steps (e.g., `OFF_RAMP`, `FIAT_DESTINATION`, etc.) are optional.
\nEvery step must include the `accountId` to be used, while `inputAssetId` and `outputAssetId` are optional. \nIf those are not provided, a default value will be used from the Corridor Settings.
\nIf the inputAssetId or the outputAssetId is provided for one of the objects, all assets in the objects must be consistent. For example, if the output asset of ON_RAMP is XLM_USDC_5F3T, then the input asset of the VAULT_ACCOUNT must also be XLM_USDC_5F3T..
\nYou can set a slippage amount for your configuration. Slippage is defined by basis points (bps). This value can be overloaded on execution. If you do not configure a slippage amount, the default slippage of 10000 bps (10%) is used.
\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "get", + "path": "/payments/xb-settlements/configs/{configId}", + "name": "payments_xb_settlements_configs_getByConfigid", + "parameters": [ + { + "type": "string", + "description": "The cross-border settlement configuration ID." + } + ], + "output": { + "type": "object", + "properties": { + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "corridorId": { + "type": "string", + "enum": [ + "MX_US", + "CO_US", + "US_MX", + "US_EU", + "US_UK" + ], + "description": "- MX_US : Mexico (MXN) to USA (USD)\n- CO_US : Colombia (COP) to USA (USD)\n- US_MX : USA (USD) to Mexico (MXN)\n- US_EU : USA (USD) to Europe Union (EUR)\n- US_UK : USA (USD) to United Kingdon (GBP)\n" + }, + "name": { + "type": "string", + "description": "The name for the cross-border ettlement configuration" + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAssetId": {}, + "outputAssetId": {} + }, + "required": [ + "accountId" + ] + } + }, + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + }, + "createdAt": { + "type": "number", + "description": "The creation time in epoch format." + } + }, + "required": [ + "configId", + "name", + "corridorId", + "steps", + "conversionSlippageBasisPoints", + "createdAt" + ] + }, + "description": "Get a specific cross-border settlement configuration.
\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "put", + "path": "/payments/xb-settlements/configs/{configId}", + "name": "payments_xb_settlements_configs_putByConfigid", + "parameters": [ + { + "type": "string", + "description": "The cross-border settlement configuration ID." + }, + { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name for the cross-border settlement configuration" + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAssetId": {}, + "outputAssetId": {} + }, + "required": [ + "accountId" + ] + } + }, + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + } + }, + "required": [ + "name", + "steps" + ] + } + ], + "output": { + "type": "object", + "properties": { + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "corridorId": { + "type": "string", + "enum": [ + "MX_US", + "CO_US", + "US_MX", + "US_EU", + "US_UK" + ], + "description": "- MX_US : Mexico (MXN) to USA (USD)\n- CO_US : Colombia (COP) to USA (USD)\n- US_MX : USA (USD) to Mexico (MXN)\n- US_EU : USA (USD) to Europe Union (EUR)\n- US_UK : USA (USD) to United Kingdon (GBP)\n" + }, + "name": { + "type": "string", + "description": "The name for the cross-border ettlement configuration" + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAssetId": {}, + "outputAssetId": {} + }, + "required": [ + "accountId" + ] + } + }, + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + }, + "createdAt": { + "type": "number", + "description": "The creation time in epoch format." + } + }, + "required": [ + "configId", + "name", + "corridorId", + "steps", + "conversionSlippageBasisPoints", + "createdAt" + ] + }, + "description": "Edit a cross-border settlement configuration.\nEditing a configuration does not affect previously executed flows that used the configuration.\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "delete", + "path": "/payments/xb-settlements/configs/{configId}", + "name": "payments_xb_settlements_configs_eraseByConfigid", + "parameters": [ + { + "type": "string", + "description": "The cross-border settlement configuration ID." + } + ], + "output": { + "type": "object", + "properties": { + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "corridorId": { + "type": "string", + "enum": [ + "MX_US", + "CO_US", + "US_MX", + "US_EU", + "US_UK" + ], + "description": "- MX_US : Mexico (MXN) to USA (USD)\n- CO_US : Colombia (COP) to USA (USD)\n- US_MX : USA (USD) to Mexico (MXN)\n- US_EU : USA (USD) to Europe Union (EUR)\n- US_UK : USA (USD) to United Kingdon (GBP)\n" + }, + "name": { + "type": "string", + "description": "The name for the cross-border ettlement configuration" + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAssetId": {}, + "outputAssetId": {} + }, + "required": [ + "accountId" + ] + } + }, + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + }, + "createdAt": { + "type": "number", + "description": "The creation time in epoch format." + } + }, + "required": [ + "configId", + "name", + "corridorId", + "steps", + "conversionSlippageBasisPoints", + "createdAt" + ] + }, + "description": "Delete a cross-border settlement configuration.\nThis does not delete or remove previously executed flows that used this configuration.\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "post", + "path": "/payments/xb-settlements/flows", + "name": "payments_xb_settlements_flows_post", + "parameters": [ + { + "type": "object", + "properties": { + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "amount": { + "type": "string", + "description": "The amount to transfer in this cross-border flow. The type of asset is defined by the cross-border settlement configuration." + } + }, + "required": [ + "configId", + "amount" + ] + } + ], + "output": { + "type": "object", + "properties": { + "flowId": { + "type": "string", + "description": "The unique id for the cross-border flow." + }, + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "conversionRate": { + "type": "string", + "description": "The conversion rate received from the on-ramp or off-ramp." + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "estimatedOutputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "totalEstimatedFee": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "totalEstimatedTime": { + "type": "number", + "description": "The total *estimated* time for executing the cross-border flow." + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "outputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "estimatedFeeAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "estimatedTime": { + "type": "number", + "description": "The estimated time for executing the step." + }, + "isSignRequired": { + "type": "boolean", + "description": "Whether or not signing is required for executing the step." + } + }, + "required": [ + "accountId", + "inputAmount", + "outputAmount", + "estimatedFeeAmount", + "estimatedTime", + "isSignRequired" + ] + } + } + }, + "required": [ + "flowId", + "configId", + "steps", + "inputAmount", + "estimatedOutputAmount", + "totalEstimatedFee", + "totalEstimatedTime", + "conversionRate" + ] + }, + "description": "Create a new cross-border settlement flow.\n\nCreate a cross-border flow (based on a cross-border configuration) with an amount to transfer. \nThe assetId is defined by the cross-border configuration.\nCreating a flow triggers a calculation of the flow estimations, including FX rates, times, and fees based on the amount provided.\nCreating a cross-border flow will not execute the flow.\n\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "get", + "path": "/payments/xb-settlements/flows/{flowId}", + "name": "payments_xb_settlements_flows_getByFlowid", + "parameters": [ + { + "type": "string", + "description": "The cross-border settlement flow ID." + } + ], + "output": { + "type": "object", + "properties": { + "preview": { + "type": "object", + "properties": { + "flowId": { + "type": "string", + "description": "The unique id for the cross-border flow." + }, + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "conversionRate": { + "type": "string", + "description": "The conversion rate received from the on-ramp or off-ramp." + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "estimatedOutputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "totalEstimatedFee": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "totalEstimatedTime": { + "type": "number", + "description": "The total *estimated* time for executing the cross-border flow." + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "outputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "estimatedFeeAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "estimatedTime": { + "type": "number", + "description": "The estimated time for executing the step." + }, + "isSignRequired": { + "type": "boolean", + "description": "Whether or not signing is required for executing the step." + } + }, + "required": [ + "accountId", + "inputAmount", + "outputAmount", + "estimatedFeeAmount", + "estimatedTime", + "isSignRequired" + ] + } + } + }, + "required": [ + "flowId", + "configId", + "steps", + "inputAmount", + "estimatedOutputAmount", + "totalEstimatedFee", + "totalEstimatedTime", + "conversionRate" + ] + }, + "execution": { + "type": "object", + "properties": { + "flowId": { + "type": "string", + "description": "The unique id for the cross-border flow." + }, + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "outputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "totalFee": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "initiatedAt": { + "type": "number", + "description": "The time the cross-border flow executed in epoch format." + }, + "initiatedBy": { + "description": "The id of the user which launched the flow", + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "NOT_LAUNCHED", + "PROCESSING", + "COMPLETED", + "FAILED" + ] + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "A unique id for the step execution" + }, + "accountId": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "NOT_STARTED", + "PROCESSING", + "COMPLETED", + "FAILED" + ] + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "outputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "fee": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "startedAt": { + "type": "number", + "description": "The step execution start time in epoch format." + }, + "completedAt": { + "type": "number", + "description": "The step execution end time in epoch format." + }, + "isSignRequired": { + "type": "boolean", + "description": "Whether or not signing is required for executing the step." + } + }, + "required": [ + "id", + "accountId", + "status", + "inputAmount", + "isSignRequired" + ] + } + }, + "selectedConversionSlippage": { + "type": "object", + "description": "Indicates the selected slippage used during the flow since override logic may have taken place.", + "properties": { + "basisPoints": { + "type": "number" + }, + "reason": { + "type": "string", + "enum": [ + "DEFAULT", + "CONFIG", + "FLOW" + ] + } + }, + "required": [ + "basisPoints", + "reason" + ] + } + }, + "required": [ + "flowId", + "configId", + "steps", + "inputAmount", + "outputAmount", + "totalFee", + "initiatedAt", + "initiatedBy", + "state", + "selectedConversionSlippage" + ] + } + } + }, + "description": "Get specific cross-border settlement flow details.\n\nGets details for a specific cross-border settlement flow\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "post", + "path": "/payments/xb-settlements/flows/{flowId}/actions/execute", + "name": "payments_xb_settlements_flows_actions_execute_postByFlowid", + "parameters": [ + { + "type": "string", + "description": "The cross-border settlement flow ID." + }, + { + "type": "object", + "properties": { + "conversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "flowId": { + "type": "string", + "description": "The unique id for the cross-border flow." + }, + "configId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "outputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "totalFee": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "initiatedAt": { + "type": "number", + "description": "The time the cross-border flow executed in epoch format." + }, + "initiatedBy": { + "description": "The id of the user which launched the flow", + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "NOT_LAUNCHED", + "PROCESSING", + "COMPLETED", + "FAILED" + ] + }, + "steps": { + "type": "object", + "properties": { + "stepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "A unique id for the step execution" + }, + "accountId": { + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "NOT_STARTED", + "PROCESSING", + "COMPLETED", + "FAILED" + ] + }, + "inputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "outputAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "fee": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": {} + }, + "required": [ + "amount" + ] + }, + "startedAt": { + "type": "number", + "description": "The step execution start time in epoch format." + }, + "completedAt": { + "type": "number", + "description": "The step execution end time in epoch format." + }, + "isSignRequired": { + "type": "boolean", + "description": "Whether or not signing is required for executing the step." + } + }, + "required": [ + "id", + "accountId", + "status", + "inputAmount", + "isSignRequired" + ] + } + }, + "selectedConversionSlippage": { + "type": "object", + "description": "Indicates the selected slippage used during the flow since override logic may have taken place.", + "properties": { + "basisPoints": { + "type": "number" + }, + "reason": { + "type": "string", + "enum": [ + "DEFAULT", + "CONFIG", + "FLOW" + ] + } + }, + "required": [ + "basisPoints", + "reason" + ] + } + }, + "required": [ + "flowId", + "configId", + "steps", + "inputAmount", + "outputAmount", + "totalFee", + "initiatedAt", + "initiatedBy", + "state", + "selectedConversionSlippage" + ] + }, + "description": "Execute cross-border settlement flow.\n\nSend a payment flow with 'flowId' for execution.\nIf a differet slippage configuraion is needed for this execution than configured in the flow configuration, the request body must define the desired slippage configuration for this execution.\n\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "post", + "path": "/payments/payout", + "name": "payments_payout_post", + "parameters": [ + { + "type": "object", + "properties": { + "paymentAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "FIAT_ACCOUNT" + ] + } + }, + "required": [ + "id", + "type" + ] + }, + "instructionSet": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "payeeAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT" + ], + "description": "- VAULT_ACCOUNT \ta native Fireblocks vault account\n- EXCHANGE_ACCOUNT \ta third-party exchange account\n- INTERNAL_WALLET \ta whitelisted address marked as internal to the workspace/organization\n- EXTERNAL_WALLET\ta whitelisted address marked as external\n- NETWORK_CONNECTION\ta member of the Fireblocks network\n- FIAT_ACCOUNT\ta third-party account of a fiat bank (Signature, BCB, etc)\n" + } + }, + "required": [ + "id", + "type" + ] + }, + "amount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": { + "type": "string" + } + }, + "required": [ + "amount", + "assetId" + ] + } + }, + "required": [ + "amount", + "payeeAccount" + ] + } + } + }, + "required": [ + "paymentAccount", + "instructionSet" + ] + } + ], + "output": { + "type": "object", + "properties": { + "payoutId": { + "type": "string" + }, + "paymentAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "FIAT_ACCOUNT" + ] + } + } + }, + "createdAt": { + "type": "number" + }, + "state": { + "type": "string", + "enum": [ + "CREATED", + "FILE_FOUND", + "REQUESTED", + "TRANSLATED", + "PROCESSING", + "SUBMITTED", + "FINALIZED", + "INSUFFICIENT_BALANCE", + "FAILED" + ], + "description": "- CREATED - payout instruction set created with all its details\n- FILE_FOUND - new file found in the FTP\n- REQUESTED - payout requested with all its details\n- TRANSLATED - payout instruction account IDs identified and translated\n- PROCESSING - payout instruction set executed and is processing\n- SUBMITTED - transactions submitted for payout instructions\n- FINALIZED - payout finished processing, all transactions processed successfully\n- INSUFFICIENT_BALANCE - insufficient balance in the payment account (can be a temporary state)\n- FAILED - one or more of the payout instructions failed\n" + }, + "status": { + "type": "string", + "enum": [ + "REGISTERED", + "VERIFYING", + "IN_PROGRESS", + "DONE", + "INSUFFICIENT_BALANCE", + "FAILED" + ], + "description": "- REQUESTED\tpayout requested with all its details\n- VERIFIED\tpayout instruction set details were verified\n- PROCESSING\tpayout instruction set executed and is processing\n- FINALIZED\tpayout done (all payout instructions completed successfully)\n- INSUFFICIENT_BALANCE\tinsufficient balance in the payment account (can be a temporary state)\n- FAILED\tone or more of the payout instructions failed\n" + }, + "reasonOfFailure": { + "type": "string", + "description": "
    \n
  • INSUFFICIENT_BALANCE
  • \n
  • SOURCE_TRANSLATION
  • \n
  • SOURCE_NOT_UNIQUE
  • \n
  • SOURCE_NOT_FOUND
  • \n
  • SOURCE_TYPE_NOT_SUPPORTED
  • \n
  • EMPTY_SOURCE
  • \n
  • DESTINATION_TRANSLATION
  • \n
  • DESTINATION_NOT_UNIQUE
  • \n
  • DESTINATION_NOT_FOUND
  • \n
  • EMPTY_DESTINATION
  • \n
  • PARSING
  • \n
  • UNKNOWN
  • \n
  • FIREBLOCKS_CLIENT
  • \n
  • TRANSACTION_SUBMISSION
  • \n
\n" + }, + "initMethod": { + "type": "string", + "enum": [ + "FILE", + "API" + ] + }, + "instructionSet": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "payeeAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT" + ], + "description": "- VAULT_ACCOUNT \ta native Fireblocks vault account\n- EXCHANGE_ACCOUNT \ta third-party exchange account\n- INTERNAL_WALLET \ta whitelisted address marked as internal to the workspace/organization\n- EXTERNAL_WALLET\ta whitelisted address marked as external\n- NETWORK_CONNECTION\ta member of the Fireblocks network\n- FIAT_ACCOUNT\ta third-party account of a fiat bank (Signature, BCB, etc)\n" + } + } + }, + "amount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": { + "type": "string" + } + }, + "required": [ + "amount", + "assetId" + ] + }, + "state": { + "type": "string", + "enum": [ + "NOT_STARTED", + "TRANSACTION_SENT", + "COMPLETED", + "FAILED", + "TRANSLATION_ERROR", + "SKIPPED" + ], + "description": "- NOT_STARTED\t- waiting to start\n- TRANSACTION_SENT - an underlying transaction was sent\n- COMPLETED\t- completed successfully\n- FAILED - failed\n- TRANSLATION_ERROR -lookup of the destination failed (due to changes in the underlying whitelisted external wallet or similar)\n- SKIPPED- no transaction(s) created for this instruction\n" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "SUBMITTED", + "QUEUED", + "PENDING_AUTHORIZATION", + "PENDING_SIGNATURE", + "BROADCASTING", + "PENDING_3RD_PARTY_MANUAL_APPROVAL", + "PENDING_3RD_PARTY", + "PENDING", + "CONFIRMING", + "CONFIRMED", + "COMPLETED", + "PARTIALLY_COMPLETED", + "PENDING_AML_SCREENING", + "CANCELLING", + "CANCELLED", + "REJECTED", + "BLOCKED", + "FAILED", + "TIMEOUT" + ] + }, + "timestamp": { + "type": "number", + "format": "date-time" + }, + "instructionId": { + "type": "string" + } + }, + "required": [ + "id", + "state" + ] + } + } + }, + "required": [ + "amount", + "payeeAccount", + "state", + "transactions" + ] + } + }, + "reportUrl": { + "type": "string" + } + }, + "required": [ + "payoutId", + "createdAt", + "state", + "status", + "paymentAccount", + "instructionSet" + ] + }, + "description": "Create a payout instruction set.\n\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoints include APIs available only for customers with Payments Engine enabled on their accounts.
\n
These endpoints are currently in beta and might be subject to changes.
\n
If you want to learn more about Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or email CSM@fireblocks.com.
\n
Create a payout instruction set.
\nA payout instruction set is a set of instructions for distributing payments from a single payment account to a list of payee accounts.
\nThe instruction set defines:
\n
    \n
  • the payment account and its account type (vault, exchange, or fiat).
  • \n
  • the account type (vault account, exchange account, whitelisted address, network connection, fiat account, or merchant account), the amount, and the asset of payment for each payee account.
  • \n
\n" + }, + { + "method": "post", + "path": "/payments/payout/{payoutId}/actions/execute", + "name": "payments_payout_actions_execute_postByPayoutid", + "parameters": [ + { + "type": "string", + "description": "the payout id received from the creation of the payout instruction set" + } + ], + "output": { + "type": "object", + "properties": { + "payoutId": { + "type": "string" + } + }, + "required": [ + "payoutId" + ] + }, + "description": "Execute a payout instruction set.\n\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoints include APIs available only for customers with Payments Engine enabled on their accounts.
\n
These endpoints are currently in beta and might be subject to changes.
\n
If you want to learn more about Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or email CSM@fireblocks.com.
\n
Execute a payout instruction set.
\n
The instruction set will be verified and executed.
\nSource locking
\nIf you are executing a payout instruction set from a payment account with an already active payout the active payout will complete before the new payout instruction set can be executed.
\nYou cannot execute the same payout instruction set more than once.\n" + }, + { + "method": "get", + "path": "/payments/payout/{payoutId}", + "name": "payments_payout_getByPayoutid", + "parameters": [ + { + "type": "string", + "description": "the payout id received from the creation of the payout instruction set" + } + ], + "output": { + "type": "object", + "properties": { + "payoutId": { + "type": "string" + }, + "paymentAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "FIAT_ACCOUNT" + ] + } + } + }, + "createdAt": { + "type": "number" + }, + "state": { + "type": "string", + "enum": [ + "CREATED", + "FILE_FOUND", + "REQUESTED", + "TRANSLATED", + "PROCESSING", + "SUBMITTED", + "FINALIZED", + "INSUFFICIENT_BALANCE", + "FAILED" + ], + "description": "- CREATED - payout instruction set created with all its details\n- FILE_FOUND - new file found in the FTP\n- REQUESTED - payout requested with all its details\n- TRANSLATED - payout instruction account IDs identified and translated\n- PROCESSING - payout instruction set executed and is processing\n- SUBMITTED - transactions submitted for payout instructions\n- FINALIZED - payout finished processing, all transactions processed successfully\n- INSUFFICIENT_BALANCE - insufficient balance in the payment account (can be a temporary state)\n- FAILED - one or more of the payout instructions failed\n" + }, + "status": { + "type": "string", + "enum": [ + "REGISTERED", + "VERIFYING", + "IN_PROGRESS", + "DONE", + "INSUFFICIENT_BALANCE", + "FAILED" + ], + "description": "- REQUESTED\tpayout requested with all its details\n- VERIFIED\tpayout instruction set details were verified\n- PROCESSING\tpayout instruction set executed and is processing\n- FINALIZED\tpayout done (all payout instructions completed successfully)\n- INSUFFICIENT_BALANCE\tinsufficient balance in the payment account (can be a temporary state)\n- FAILED\tone or more of the payout instructions failed\n" + }, + "reasonOfFailure": { + "type": "string", + "description": "
    \n
  • INSUFFICIENT_BALANCE
  • \n
  • SOURCE_TRANSLATION
  • \n
  • SOURCE_NOT_UNIQUE
  • \n
  • SOURCE_NOT_FOUND
  • \n
  • SOURCE_TYPE_NOT_SUPPORTED
  • \n
  • EMPTY_SOURCE
  • \n
  • DESTINATION_TRANSLATION
  • \n
  • DESTINATION_NOT_UNIQUE
  • \n
  • DESTINATION_NOT_FOUND
  • \n
  • EMPTY_DESTINATION
  • \n
  • PARSING
  • \n
  • UNKNOWN
  • \n
  • FIREBLOCKS_CLIENT
  • \n
  • TRANSACTION_SUBMISSION
  • \n
\n" + }, + "initMethod": { + "type": "string", + "enum": [ + "FILE", + "API" + ] + }, + "instructionSet": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "payeeAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT" + ], + "description": "- VAULT_ACCOUNT \ta native Fireblocks vault account\n- EXCHANGE_ACCOUNT \ta third-party exchange account\n- INTERNAL_WALLET \ta whitelisted address marked as internal to the workspace/organization\n- EXTERNAL_WALLET\ta whitelisted address marked as external\n- NETWORK_CONNECTION\ta member of the Fireblocks network\n- FIAT_ACCOUNT\ta third-party account of a fiat bank (Signature, BCB, etc)\n" + } + } + }, + "amount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": { + "type": "string" + } + }, + "required": [ + "amount", + "assetId" + ] + }, + "state": { + "type": "string", + "enum": [ + "NOT_STARTED", + "TRANSACTION_SENT", + "COMPLETED", + "FAILED", + "TRANSLATION_ERROR", + "SKIPPED" + ], + "description": "- NOT_STARTED\t- waiting to start\n- TRANSACTION_SENT - an underlying transaction was sent\n- COMPLETED\t- completed successfully\n- FAILED - failed\n- TRANSLATION_ERROR -lookup of the destination failed (due to changes in the underlying whitelisted external wallet or similar)\n- SKIPPED- no transaction(s) created for this instruction\n" + }, + "transactions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "SUBMITTED", + "QUEUED", + "PENDING_AUTHORIZATION", + "PENDING_SIGNATURE", + "BROADCASTING", + "PENDING_3RD_PARTY_MANUAL_APPROVAL", + "PENDING_3RD_PARTY", + "PENDING", + "CONFIRMING", + "CONFIRMED", + "COMPLETED", + "PARTIALLY_COMPLETED", + "PENDING_AML_SCREENING", + "CANCELLING", + "CANCELLED", + "REJECTED", + "BLOCKED", + "FAILED", + "TIMEOUT" + ] + }, + "timestamp": { + "type": "number", + "format": "date-time" + }, + "instructionId": { + "type": "string" + } + }, + "required": [ + "id", + "state" + ] + } + } + }, + "required": [ + "amount", + "payeeAccount", + "state", + "transactions" + ] + } + }, + "reportUrl": { + "type": "string" + } + }, + "required": [ + "payoutId", + "createdAt", + "state", + "status", + "paymentAccount", + "instructionSet" + ] + }, + "description": "Get the status of a payout instruction set.\n\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoints include APIs available only for customers with Payments Engine enabled on their accounts.
\n
These endpoints are currently in beta and might be subject to changes.
\n
If you want to learn more about Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or email CSM@fireblocks.com.
\n" + }, + { + "method": "get", + "path": "/gas_station", + "name": "gas_station_get", + "parameters": [], + "output": { + "type": "object", + "properties": { + "balance": { + "type": "object" + }, + "configuration": { + "type": "object", + "properties": { + "gasThreshold": { + "type": "string" + }, + "gasCap": { + "type": "string" + }, + "maxGasPrice": { + "type": "string" + } + } + } + }, + "required": [ + "low", + "medium", + "high" + ] + }, + "description": "Get gas station settings.\n\nReturns gas station settings and ETH balance." + }, + { + "method": "get", + "path": "/gas_station/{assetId}", + "name": "gas_station_getByAssetid", + "parameters": [ + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + } + ], + "output": { + "type": "object", + "properties": { + "balance": { + "type": "object" + }, + "configuration": { + "type": "object", + "properties": { + "gasThreshold": { + "type": "string" + }, + "gasCap": { + "type": "string" + }, + "maxGasPrice": { + "type": "string" + } + } + } + }, + "required": [ + "low", + "medium", + "high" + ] + }, + "description": "Get gas station settings by asset.\n\nReturns gas station settings and balances for a requested asset." + }, + { + "method": "put", + "path": "/gas_station/configuration", + "name": "gas_station_configuration_put", + "parameters": [ + { + "type": "object", + "properties": { + "gasThreshold": { + "type": "string" + }, + "gasCap": { + "type": "string" + }, + "maxGasPrice": { + "type": "string" + } + } + } + ], + "description": "Edit gas station settings.\n\nConfigures gas station settings for ETH." + }, + { + "method": "put", + "path": "/gas_station/configuration/{assetId}", + "name": "gas_station_configuration_putByAssetid", + "parameters": [ + { + "type": "string", + "x-fb-entity": "asset", + "description": "The ID of the asset" + }, + { + "type": "object", + "properties": { + "gasThreshold": { + "type": "string" + }, + "gasCap": { + "type": "string" + }, + "maxGasPrice": { + "type": "string" + } + } + } + ], + "description": "Edit gas station settings for an asset.\n\nConfigures gas station settings for a requested asset." + }, + { + "method": "get", + "path": "/users", + "name": "users_get", + "parameters": [], + "output": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "role": { + "type": "string" + }, + "email": { + "type": "string" + }, + "enabled": { + "type": "boolean" + } + } + } + } + } + }, + "description": "List users.\n\nList all users for the workspace.\n\nPlease note that this endpoint is available only for API keys with Admin permissions.\n" + }, + { + "method": "get", + "path": "/audits", + "name": "audits_get", + "parameters": [ + { + "type": "object", + "properties": {}, + "required": [] + } + ], + "description": "Get audit logs" + }, + { + "method": "post", + "path": "/off_exchange/add", + "name": "off_exchange_add_post", + "parameters": [ + { + "type": "object", + "properties": { + "transactionRequest": { + "type": "object", + "properties": { + "operation": { + "type": "string", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE" + ], + "description": "* `TRANSFER` - The default value for an operation. Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, to describe the transaction at your Fireblocks workspace.", + "example": "Ticket 123" + }, + "externalTxId": { + "type": "string", + "description": "An optional but highly recommended parameter. Fireblocks will reject future transactions with same ID. \n \nYou should set this to a unique ID representing the transaction, to avoid submitting the same transaction twice. This helps with cases where submitting the transaction responds with an error code due to Internet interruptions, but the transaction was actually sent and processed. To validate whether a transaction has been processed, [Find a specific transaction by external transaction ID](https://developers.fireblocks.com/reference/get_transactions-external-tx-id-externaltxid).\n \nThere is no specific format required for this parameter.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT` or `BURN` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset", + "example": "ETH" + }, + "source": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT", + "COMPOUND", + "GAS_STATION", + "ONE_TIME_ADDRESS", + "UNKNOWN", + "END_USER_WALLET" + ] + }, + "subType": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "BLINC", + "BYBIT", + "CIRCLE", + "COINBASEEXCHANGE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "GEMINI", + "HITBTC", + "HUOBI", + "INDEPENDENTRESERVE", + "KORBIT", + "KRAKEN", + "KRAKENINTL", + "KUCOIN", + "LIQUID", + "OKCOIN", + "OKEX", + "PAXOS", + "POLONIEX", + "External", + "Internal" + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "walletId": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "type" + ] + }, + "destination": {}, + "destinations": { + "type": "array", + "description": "For UTXO based blockchains, you can send a single transaction to multiple destinations.", + "items": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "destination": {} + } + } + }, + "amount": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "0.02" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 0.02 + } + ], + "description": "For `TRANSFER` operations, the requested amount to transfer, in the asset’s unit. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "\"When set to `true`, the fee will be deducted from the requested amount.\"\n\n**Note**: This parameter can only be considered if a transaction’s asset is a base asset, such as ETH or MATIC. If the asset can’t be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account." + }, + "forceSweep": { + "type": "boolean", + "description": "For Polkadot, Kusama and Westend transactions only. When set to true, Fireblocks will empty the asset wallet.\n\n **Note:** If set to true when the source account is exactly 1 DOT, the transaction will fail. Any amount more or less than 1 DOT succeeds. This is a Polkadot blockchain limitation." + }, + "feeLevel": { + "type": "string", + "enum": [ + "LOW", + "MEDIUM", + "HIGH" + ], + "description": "For UTXO or EVM-based blockchains only. Defines the blockchain fee level which will be payed for the transaction. Alternatively, specific fee estimation parameters exist below." + }, + "fee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For UTXO-based blockchains, the fee per bytes in the asset’s smallest unit (Satoshi, Latoshi, etc.). For Ripple, the fee for the transaction. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "priorityFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "2" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 2 + } + ], + "description": "For Ethereum-based blockchains only, the fee for EIP-1559 transaction pricing mechanism. Value is in Gwei. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "failOnLowFee": { + "type": "boolean", + "description": "When set to `true`, in case the current `MEDIUM` fee level is higher than the one specified in the transaction, the transaction will fail to avoid getting stuck with no confirmations." + }, + "maxFee": { + "description": "The maximum fee (gas price or fee per byte) that should be payed for the transaction. In case the current value of the requested `feeLevel` is higher than this requested maximum fee. Represented by a numeric string for accurate precision.", + "type": "string", + "example": "120" + }, + "gasLimit": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "21000" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 21000 + } + ], + "description": "For EVM-based blockchains only. Units of gas required to process the transaction. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "gasPrice": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For non-EIP-1559, EVM-based transactions. Price per gas unit (in Ethereum this is specified in Gwei). Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "networkFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For EVM-based blockchains only. The total transaction fee in the blockchain’s largest unit. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated. - The transaction blockchain fee.\n- For Ethereum, you can't pass gasPrice, gasLimit and networkFee all together.\n- A numeric value representation is required." + }, + "replaceTxByHash": { + "type": "string", + "description": "For EVM-based blockchains only. In case a transaction is stuck, specify the hash of the stuck transaction to replace it by this transaction with a higher fee, or to replace it with this transaction with a zero fee and drop it from the blockchain.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "extraParameters": { + "type": "object", + "properties": {}, + "description": "Additional protocol / operation specific key-value parameters:\n\nFor UTXO-based blockchain input selection, add the key `inputsSelection` with the value set the [input selection structure.](https://developers.fireblocks.com/reference/transaction-objects#inputsselection) The inputs can be retrieved from the [Retrieve Unspent Inputs endpoint.](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid-assetid-unspent-inputs)\n\nFor `RAW` operations, add the key `rawMessageData` with the value set to the [raw message data structure.](https://developers.fireblocks.com/reference/raw-signing-objects#rawmessagedata)\n\nFor `CONTRACT_CALL` operations, add the key `contractCallData` with the value set to the Ethereum smart contract Application Binary Interface (ABI) payload. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n" + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions.", + "example": "abcdef" + }, + "autoStaking": { + "type": "boolean", + "description": "This feature is no longer supported." + }, + "networkStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + }, + "cpuStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + } + } + }, + "isSrcCollateral": { + "type": "boolean", + "description": "optional" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the transaction." + }, + "status": { + "type": "string", + "description": "The primary status of the transaction. For details, see [Primary transaction statuses.] (https://developers.fireblocks.com/reference/primary-transaction-statuses)" + }, + "systemMessages": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "WARN", + "BLOCK" + ] + }, + "message": { + "type": "string", + "description": "A response from Fireblocks that communicates a message about the health of the process being performed. If this object is returned with data, you should expect potential delays or incomplete transaction statuses.", + "example": "Slow transaction processing. Outgoing transactions might be stuck." + } + } + } + } + }, + "description": "add collateral, create deposit request" + }, + { + "method": "post", + "path": "/off_exchange/remove", + "name": "off_exchange_remove_post", + "parameters": [ + { + "type": "object", + "properties": { + "transactionRequest": { + "type": "object", + "properties": { + "operation": { + "type": "string", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE" + ], + "description": "* `TRANSFER` - The default value for an operation. Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, to describe the transaction at your Fireblocks workspace.", + "example": "Ticket 123" + }, + "externalTxId": { + "type": "string", + "description": "An optional but highly recommended parameter. Fireblocks will reject future transactions with same ID. \n \nYou should set this to a unique ID representing the transaction, to avoid submitting the same transaction twice. This helps with cases where submitting the transaction responds with an error code due to Internet interruptions, but the transaction was actually sent and processed. To validate whether a transaction has been processed, [Find a specific transaction by external transaction ID](https://developers.fireblocks.com/reference/get_transactions-external-tx-id-externaltxid).\n \nThere is no specific format required for this parameter.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT` or `BURN` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset", + "example": "ETH" + }, + "source": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT", + "COMPOUND", + "GAS_STATION", + "ONE_TIME_ADDRESS", + "UNKNOWN", + "END_USER_WALLET" + ] + }, + "subType": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "BLINC", + "BYBIT", + "CIRCLE", + "COINBASEEXCHANGE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "GEMINI", + "HITBTC", + "HUOBI", + "INDEPENDENTRESERVE", + "KORBIT", + "KRAKEN", + "KRAKENINTL", + "KUCOIN", + "LIQUID", + "OKCOIN", + "OKEX", + "PAXOS", + "POLONIEX", + "External", + "Internal" + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "walletId": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "type" + ] + }, + "destination": {}, + "destinations": { + "type": "array", + "description": "For UTXO based blockchains, you can send a single transaction to multiple destinations.", + "items": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "destination": {} + } + } + }, + "amount": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "0.02" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 0.02 + } + ], + "description": "For `TRANSFER` operations, the requested amount to transfer, in the asset’s unit. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "\"When set to `true`, the fee will be deducted from the requested amount.\"\n\n**Note**: This parameter can only be considered if a transaction’s asset is a base asset, such as ETH or MATIC. If the asset can’t be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account." + }, + "forceSweep": { + "type": "boolean", + "description": "For Polkadot, Kusama and Westend transactions only. When set to true, Fireblocks will empty the asset wallet.\n\n **Note:** If set to true when the source account is exactly 1 DOT, the transaction will fail. Any amount more or less than 1 DOT succeeds. This is a Polkadot blockchain limitation." + }, + "feeLevel": { + "type": "string", + "enum": [ + "LOW", + "MEDIUM", + "HIGH" + ], + "description": "For UTXO or EVM-based blockchains only. Defines the blockchain fee level which will be payed for the transaction. Alternatively, specific fee estimation parameters exist below." + }, + "fee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For UTXO-based blockchains, the fee per bytes in the asset’s smallest unit (Satoshi, Latoshi, etc.). For Ripple, the fee for the transaction. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "priorityFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "2" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 2 + } + ], + "description": "For Ethereum-based blockchains only, the fee for EIP-1559 transaction pricing mechanism. Value is in Gwei. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "failOnLowFee": { + "type": "boolean", + "description": "When set to `true`, in case the current `MEDIUM` fee level is higher than the one specified in the transaction, the transaction will fail to avoid getting stuck with no confirmations." + }, + "maxFee": { + "description": "The maximum fee (gas price or fee per byte) that should be payed for the transaction. In case the current value of the requested `feeLevel` is higher than this requested maximum fee. Represented by a numeric string for accurate precision.", + "type": "string", + "example": "120" + }, + "gasLimit": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "21000" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 21000 + } + ], + "description": "For EVM-based blockchains only. Units of gas required to process the transaction. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "gasPrice": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For non-EIP-1559, EVM-based transactions. Price per gas unit (in Ethereum this is specified in Gwei). Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated." + }, + "networkFee": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "For EVM-based blockchains only. The total transaction fee in the blockchain’s largest unit. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated. - The transaction blockchain fee.\n- For Ethereum, you can't pass gasPrice, gasLimit and networkFee all together.\n- A numeric value representation is required." + }, + "replaceTxByHash": { + "type": "string", + "description": "For EVM-based blockchains only. In case a transaction is stuck, specify the hash of the stuck transaction to replace it by this transaction with a higher fee, or to replace it with this transaction with a zero fee and drop it from the blockchain.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "extraParameters": { + "type": "object", + "properties": {}, + "description": "Additional protocol / operation specific key-value parameters:\n\nFor UTXO-based blockchain input selection, add the key `inputsSelection` with the value set the [input selection structure.](https://developers.fireblocks.com/reference/transaction-objects#inputsselection) The inputs can be retrieved from the [Retrieve Unspent Inputs endpoint.](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid-assetid-unspent-inputs)\n\nFor `RAW` operations, add the key `rawMessageData` with the value set to the [raw message data structure.](https://developers.fireblocks.com/reference/raw-signing-objects#rawmessagedata)\n\nFor `CONTRACT_CALL` operations, add the key `contractCallData` with the value set to the Ethereum smart contract Application Binary Interface (ABI) payload. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n" + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions.", + "example": "abcdef" + }, + "autoStaking": { + "type": "boolean", + "description": "This feature is no longer supported." + }, + "networkStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + }, + "cpuStaking": { + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ], + "description": "This feature is no longer supported." + } + } + }, + "isDstCollateral": { + "type": "boolean", + "description": "optional" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the transaction." + }, + "status": { + "type": "string", + "description": "The primary status of the transaction. For details, see [Primary transaction statuses.] (https://developers.fireblocks.com/reference/primary-transaction-statuses)" + }, + "systemMessages": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "WARN", + "BLOCK" + ] + }, + "message": { + "type": "string", + "description": "A response from Fireblocks that communicates a message about the health of the process being performed. If this object is returned with data, you should expect potential delays or incomplete transaction statuses.", + "example": "Slow transaction processing. Outgoing transactions might be stuck." + } + } + } + } + }, + "description": "remove collateral, create withdraw request" + }, + { + "method": "get", + "path": "/off_exchange/collateral_accounts/{mainExchangeAccountId}", + "name": "off_exchange_collateral_accounts_getByMainexchangeaccountid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The id of the main exchange account for which the requested collateral account is associated with" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "CIRCLE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "FTX", + "FIXUS", + "GEMINI", + "HITBTC", + "HUOBI", + "KORBIT", + "KRAKEN", + "LIQUID", + "POLONIEX", + "OKCOIN", + "OKEX", + "SEEDCX" + ] + }, + "name": { + "type": "string", + "description": "Display name of the exchange account" + }, + "status": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "total": { + "type": "string" + }, + "available": { + "type": "string" + } + } + } + }, + "tradingAccounts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "total": { + "type": "string" + }, + "available": { + "type": "string" + } + } + } + } + } + } + }, + "isSubaccount": { + "type": "boolean", + "description": "True if the account is a subaccount in an exchange" + }, + "mainAccountId": { + "description": "if the account is a sub-account, the ID of the main account", + "type": "string" + } + } + }, + "description": "Find a specific collateral exchange account.\n\nReturns a collateral account by mainExchangeAccountId." + }, + { + "method": "post", + "path": "/webhooks/resend", + "name": "webhooks_resend_post", + "parameters": [], + "output": { + "type": "object", + "properties": { + "messagesCount": { + "type": "number" + } + } + }, + "description": "Resend failed webhooks.\n\nResends all failed webhook notifications." + }, + { + "method": "post", + "path": "/webhooks/resend/{txId}", + "name": "webhooks_resend_postByTxid", + "parameters": [ + { + "type": "string", + "minimum": 1, + "description": "The ID of the transaction for webhooks" + }, + {} + ], + "description": "Resend failed webhooks for a transaction by ID.\n\nResends failed webhook notifications for a transaction by ID." + }, + { + "method": "get", + "path": "/nfts/ownership/tokens", + "name": "nfts_ownership_tokens_get", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountIds": { + "type": "string", + "description": "A comma separated list of Vault Account IDs. Up to 100 are allowed in a single request" + }, + "ids": { + "type": "string", + "description": "A comma separated list of NFT IDs. Up to 100 are allowed in a single request." + }, + "collectionIds": { + "type": "string", + "description": "A comma separated list of collection IDs. Up to 100 are allowed in a single request." + }, + "pageCursor": { + "type": "string", + "description": "Page cursor to fetch" + }, + "pageSize": { + "minimum": 1, + "maximum": 100, + "type": "number", + "description": "Items per page (max 100)" + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "ownershipLastUpdateTime", + "name", + "collection.name", + "blockchainDescriptor" + ] + }, + "description": "Sort by param, it can be one param or a list of params separated by comma" + }, + "search": { + "maximum": 100, + "type": "string", + "description": "Search owned tokens and their collections. Possible criteria for search: token name and id within the contract/collection, collection name, blockchain descriptor and name." + } + }, + "required": [] + } + ], + "output": {}, + "description": "List all owned tokens (paginated).\n\nReturns all tokens and their data in your workspace.\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n" + }, + { + "method": "put", + "path": "/nfts/ownership/tokens", + "name": "nfts_ownership_tokens_put", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "string", + "description": "Vault account filter" + } + }, + "required": [ + "vaultAccountId" + ] + } + ], + "description": "Refresh vault account tokens.\n\nUpdates all tokens and balances per blockchain and vault account.\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n" + }, + { + "method": "get", + "path": "/nfts/ownership/collections", + "name": "nfts_ownership_collections_get", + "parameters": [ + { + "type": "object", + "properties": { + "search": { + "maximum": 100, + "type": "string", + "description": "Search owned collections. Possible criteria for search: collection name, collection contract address." + }, + "pageCursor": { + "type": "string", + "description": "Page cursor to fetch" + }, + "pageSize": { + "minimum": 1, + "maximum": 100, + "type": "number", + "description": "Items per page (max 100)" + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "name" + ] + }, + "description": "Sort by param, it can be one param or a list of params separated by comma" + } + }, + "required": [] + } + ], + "output": {}, + "description": "List owned collections (paginated).\n\nReturns all collections in your workspace\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n" + }, + { + "method": "get", + "path": "/nfts/tokens/{id}", + "name": "nfts_tokens_getById", + "parameters": [ + { + "type": "string", + "description": "NFT ID" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The Fireblocks NFT asset id" + }, + "tokenId": { + "type": "string", + "description": "Token id within the contract/collection" + }, + "standard": { + "type": "string", + "description": "ERC721 / ERC1155" + }, + "metadataURI": { + "type": "string", + "description": "URL of the original token JSON metadata" + }, + "cachedMetadataURI": { + "type": "string", + "description": "URL of the cached token JSON metadata" + }, + "media": { + "description": "Media items extracted from metadata JSON", + "type": "array", + "items": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "Cached accessible URL" + }, + "contentType": { + "type": "string", + "enum": [ + "IMAGE", + "VIDEO", + "ANIMATION", + "THREE_D", + "TEXT", + "GIF", + "UNKNOWN_TYPE", + "SVG", + "AUDIO" + ], + "description": "Media type" + } + }, + "required": [ + "url", + "contentType" + ] + } + }, + "collection": { + "description": "Parent collection information", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "symbol": { + "type": "string" + } + } + }, + "blockchainDescriptor": { + "type": "string", + "enum": [ + "ETH", + "ETH_TEST3", + "POLYGON", + "POLYGON_TEST_MUMBAI" + ] + }, + "description": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "tokenId", + "standard", + "media", + "blockchainDescriptor", + "description", + "name" + ] + }, + "description": "List token data by ID.\n\nReturns the requested token data.\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n" + }, + { + "method": "put", + "path": "/nfts/tokens/{id}", + "name": "nfts_tokens_putById", + "parameters": [ + { + "type": "string", + "description": "NFT ID" + } + ], + "description": "Refresh token metadata.\n\nUpdates the latest token metadata.\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n" + }, + { + "method": "get", + "path": "/nfts/tokens", + "name": "nfts_tokens_get", + "parameters": [ + { + "type": "object", + "properties": { + "ids": { + "type": "string", + "description": "A comma separated list of NFT IDs. Up to 100 are allowed in a single request." + }, + "pageCursor": { + "type": "string", + "description": "Page cursor to fetch" + }, + "pageSize": { + "minimum": 1, + "maximum": 100, + "type": "number", + "description": "Items per page (max 100)" + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "collection.name", + "name", + "blockchainDescriptor" + ] + }, + "description": "Sort by param, it can be one param or a list of params separated by comma" + } + }, + "required": [ + "ids" + ] + } + ], + "output": {}, + "description": "List tokens by IDs.\n\nReturns the requested tokens data\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n" + }, + { + "method": "put", + "path": "/nfts/ownership/tokens/{id}/status", + "name": "nfts_ownership_tokens_status_putById", + "parameters": [ + { + "type": "string", + "description": "NFT ID" + }, + { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "LISTED", + "ARCHIVED" + ] + } + }, + "required": [ + "status" + ] + } + ], + "description": "Update token ownership status.\n\nUpdates token ownership status for a tenant, in all tenant vaults.\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n" + }, + { + "method": "get", + "path": "/connections", + "name": "connections_get", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "userId": { + "type": "string" + }, + "vaultAccountId": { + "type": "number" + }, + "connectionMethod": { + "type": "string" + }, + "feeLevel": { + "type": "string" + }, + "appUrl": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "pageSize": { + "type": "number", + "default": 10, + "maximum": 50, + "description": "Amount of results to return in the next page." + }, + "next": { + "type": "string", + "description": "Cursor to the next page" + } + }, + "required": [] + } + ], + "output": { + "type": "object", + "properties": { + "data": { + "description": "Array with the requested Web3 connection's data", + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Id of the connection", + "example": "4e9e7051-f3b2-48e9-8ee6-b12492552657" + }, + "userId": { + "type": "string", + "description": "Id of the user that created the connection" + }, + "sessionMetadata": { + "description": "Metadata of the connection (provided by the dapp)", + "type": "object", + "properties": { + "appUrl": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "appDescription": { + "type": "string" + }, + "appIcon": { + "type": "string" + } + } + }, + "vaultAccountId": { + "type": "number", + "description": "The vault to connect", + "example": 1 + }, + "feeLevel": { + "type": "string", + "enum": [ + "MEDIUM", + "HIGH" + ], + "description": "The default fee level" + }, + "chainIds": { + "description": "The chains approved for the connection", + "example": [ + "ETH", + "ETH_TEST", + "SOL" + ], + "type": "array", + "items": { + "type": "string" + } + }, + "connectionType": { + "type": "string", + "enum": [ + "WalletConnect" + ], + "description": "The connection's type" + }, + "connectionMethod": { + "type": "string", + "enum": [ + "DESKTOP", + "MOBILE", + "API" + ], + "description": "The method through which the connection was established" + }, + "creationDate": { + "format": "date-time", + "type": "string", + "description": "Timestamp of the session's creation" + } + }, + "required": [ + "id", + "userId", + "sessionMetadata", + "vaultAccountId", + "feeLevel", + "chainIds", + "connectionType", + "connectionMethod", + "creationDate" + ] + } + }, + "paging": { + "type": "object", + "properties": { + "next": { + "type": "string", + "description": "Cursor to the next page" + } + }, + "required": [ + "next" + ] + } + }, + "required": [ + "data" + ] + }, + "description": "List all open Web3 connections.\n\nGet open Web3 connections." + }, + { + "method": "post", + "path": "/connections/wc", + "name": "connections_wc_post", + "parameters": [ + { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "number", + "description": "The ID of the vault to connect to the Web3 connection.", + "example": 1 + }, + "feeLevel": { + "type": "string", + "enum": [ + "MEDIUM", + "HIGH" + ], + "description": "The default fee level. Valid values are `MEDIUM` and `HIGH`." + }, + "uri": { + "type": "string", + "description": "The WalletConnect uri provided by the dapp.", + "example": "wc:77752975-906f-48f5-b59f-047826ee947e@1?bridge=https%3A%2F%2F0.bridge.walletconnect.org&key=64be99adc6086b7a729b0ec8c7e1f174927ab92e84f5c6f9527050225344a637" + }, + "chainIds": { + "description": "The ID of the blockchain network used in the Web3 connection.", + "example": [ + "ETH", + "ETH_TEST" + ], + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "vaultAccountId", + "feeLevel", + "uri", + "chainIds" + ] + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the Web3 connection initiated.", + "example": "4e9e7051-f3b2-48e9-8ee6-b12492552657" + }, + "sessionMetadata": { + "description": "Metadata of the Web3 connection (provided by the DApp).", + "type": "object", + "properties": { + "appUrl": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "appDescription": { + "type": "string" + }, + "appIcon": { + "type": "string" + } + } + } + }, + "required": [ + "id", + "sessionMetadata" + ] + }, + "description": "Create a new Web3 connection.\n\nInitiate a new Web3 connection.\n\n* Note: After this succeeds, make a request to `PUT /v1/connections/wc/{id}` (below) to approve or reject the new Web3 connection." + }, + { + "method": "put", + "path": "/connections/wc/{id}", + "name": "connections_wc_putById", + "parameters": [ + { + "type": "string", + "description": "The ID of the initiated Web3 connection to approve." + }, + { + "type": "object", + "properties": { + "approve": { + "type": "boolean", + "description": "Approval of the initiated Web3 connection." + } + }, + "required": [ + "approve" + ] + } + ], + "description": "Respond to a pending Web3 connection request.\n\nSubmit a response to *approve* or *reject* an initiated Web3 connection.\n* Note: This call is used to complete your `POST /v1/connections/wc/` request.\n\nAfter this succeeds, your new Web3 connection is created and functioning." + }, + { + "method": "delete", + "path": "/connections/wc/{id}", + "name": "connections_wc_eraseById", + "parameters": [ + { + "type": "string", + "description": "The ID of the existing Web3 connection to remove." + } + ], + "description": "Remove an existing Web3 connection.\n\nRemove a Web3 connection" + }, + { + "method": "post", + "path": "/screening/travel_rule/transaction/validate", + "name": "screening_travel_rule_transaction_validate_post", + "parameters": [ + { + "type": "object", + "properties": { + "transactionAsset": { + "type": "string", + "example": "BTC", + "description": "Transaction asset symbol BTC,ETH)" + }, + "destination": { + "type": "string", + "example": "bc1qxy2kgdygjrsqtzq2n0yrf1234p83kkfjhx0wlh", + "description": "Transaction destination address" + }, + "transactionAmount": { + "type": "string", + "example": "10", + "description": "Transaction amount in the transaction asset" + }, + "originatorVASPdid": { + "type": "string", + "example": "did:ethr:0x44957e75d6ce4a5bf37aae117da86422c848f7c2", + "description": "This is the identifier assigned to your VASP" + }, + "originatorEqualsBeneficiary": { + "type": "boolean", + "description": "\"True\" if the originator and beneficiary is the same person and you therefore do not need to collect any information. \"False\" if it is a third-party transfer." + }, + "travelRuleBehavior": { + "type": "boolean", + "description": "This will also check if the transaction is a TRAVEL_RULE in the beneficiary VASP's jurisdiction" + }, + "beneficiaryVASPdid": { + "type": "string", + "example": "did:ethr:0x46a7ed5813ce735387df2bfb245bd7722e0de992", + "description": "This is the identifier assigned to the VASP the funds are being sent to" + }, + "beneficiaryVASPname": { + "type": "string", + "example": "HelloCrypto", + "description": "Beneficiary VASP name" + }, + "beneficiaryName": { + "type": "string", + "example": "John Doe", + "description": "Beneficiary name" + }, + "beneficiaryAccountNumber": { + "type": "string", + "example": "1234-1234-1234-12234", + "description": "Beneficiary name" + }, + "beneficiaryAddress": { + "example": "{\"addressLine: [Wayne Manor, Gotham City, New York, USA]\"}", + "description": "Beneficiary name", + "type": "object", + "properties": { + "street": { + "type": "string", + "example": "1234 Example St", + "description": "Street address" + }, + "city": { + "type": "string", + "example": "New York", + "description": "City" + }, + "state": { + "type": "string", + "example": "NY", + "description": "State or province" + }, + "postalCode": { + "type": "string", + "example": "10001", + "description": "Postal or ZIP code" + } + } + } + }, + "required": [ + "transactionAsset", + "destination", + "transactionAmount", + "originatorVASPdid", + "originatorEqualsBeneficiary", + "travelRuleBehavior", + "beneficiaryVASPdid", + "beneficiaryVASPname", + "beneficiaryName", + "beneficiaryAccountNumber", + "beneficiaryAddress" + ] + } + ], + "output": { + "type": "object", + "properties": { + "isValid": { + "type": "boolean", + "description": "\"isValid\" will tell you if you have collected all the information needed for the travel rule data transfer. Once this field = \"true\", you can move on to the next step which is to transfer the front-end information to your back-end and perform Travel Rule Transaction create" + }, + "type": { + "type": "string", + "description": "\"type\" will tell you if the virtual asset value converted to FIAT value of the withdrawal request is above (=TRAVELRULE) or below (=BELOW_THRESHOLD) the threshold in your jurisdiction. If it is to an unhosted wallet which does not require travel rule information to be sent and only collected, it will say NON_CUSTODIAL.", + "example": "TRAVELRULE" + }, + "beneficiaryAddressType": { + "type": "string", + "description": "\"beneficiaryAddressType\" will tell you if your blockchain analytics provider or internal address book has been able to identify the wallet address.", + "example": "UNKNOWN" + }, + "addressSource": { + "type": "string", + "description": "\"addressSource\" will tell you if the address was found in your internal address book or identified by the blockchain analytics provider.", + "example": "UNKNOWN" + }, + "beneficiaryVASPdid": { + "type": "string", + "description": "The VASP DID of the beneficiary VASP", + "example": "did:ethr:0x46a7ed5813ce735387df2bfb245bd7722e0de992" + }, + "beneficiaryVASPname": { + "type": "string", + "description": "\"beneficiaryVASPname\" will tell you the name of the VASP that has been identified as the owner of the wallet address. This name is used in a subsequent call to get its DID.", + "example": "Fireblocks" + }, + "warnings": { + "description": "\"errors/warnings\" will tell you what information about the beneficiary you need to collect from the sender.", + "example": [ + "optional-beneficiaryAccountNumber" + ], + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "isValid", + "type", + "beneficiaryAddressType", + "addressSource", + "beneficiaryVASPdid", + "beneficiaryVASPname", + "warnings" + ] + }, + "description": "Validate Travel Rule Transaction.\n\nValidate Travel Rule transactions.\n\nChecks what beneficiary VASP details are required by your jurisdiction and the beneficiary's jurisdiction.\n\n**Note:** The reference content in this section documents the Travel Rule beta endpoint. The beta endpoint includes APIs that are currently in preview and aren't yet generally available.\n\nTo enroll in the beta and enable this endpoint, contact your Fireblocks Customer Success Manager or send an email to [CSM@fireblocks.com](mailto:CSM@fireblocks.com)." + }, + { + "method": "post", + "path": "/screening/travel_rule/transaction/validate/full", + "name": "screening_travel_rule_transaction_validate_full_post", + "parameters": [ + { + "type": "object", + "properties": { + "transactionAsset": { + "type": "string", + "description": "The asset involved in the transaction" + }, + "transactionAmount": { + "type": "string", + "description": "The amount of the transaction" + }, + "originatorDid": { + "type": "string", + "description": "The DID of the transaction originator" + }, + "beneficiaryDid": { + "type": "string", + "description": "The DID of the transaction beneficiary" + }, + "originatorVASPdid": { + "type": "string", + "description": "The VASP ID of the transaction originator" + }, + "beneficiaryVASPdid": { + "type": "string", + "description": "The VASP ID of the transaction beneficiary" + }, + "beneficiaryVASPname": { + "type": "string", + "description": "The name of the VASP acting as the beneficiary" + }, + "transactionBlockchainInfo": { + "description": "Information about the blockchain transaction", + "type": "object", + "properties": { + "txHash": { + "type": "string" + }, + "origin": { + "type": "string" + }, + "destination": { + "type": "string" + } + } + }, + "originator": { + "description": "Information about the originator of the transaction", + "type": "object", + "properties": { + "fullName": { + "type": "string" + }, + "dateOfBirth": { + "type": "string" + }, + "placeOfBirth": { + "type": "string" + }, + "address": { + "type": "string" + }, + "identificationNumber": { + "type": "string" + }, + "nationality": { + "type": "string" + }, + "countryOfResidence": { + "type": "string" + }, + "taxIdentificationNumber": { + "type": "string" + }, + "customerNumber": { + "type": "string" + } + } + }, + "beneficiary": { + "description": "Information about the beneficiary of the transaction", + "type": "object", + "properties": { + "fullName": { + "type": "string" + }, + "dateOfBirth": { + "type": "string" + }, + "placeOfBirth": { + "type": "string" + }, + "address": { + "type": "string" + }, + "identificationNumber": { + "type": "string" + }, + "nationality": { + "type": "string" + }, + "countryOfResidence": { + "type": "string" + }, + "taxIdentificationNumber": { + "type": "string" + }, + "customerNumber": { + "type": "string" + } + } + }, + "encrypted": { + "type": "string", + "description": "Encrypted data related to the transaction" + }, + "protocol": { + "type": "string", + "description": "The protocol used to perform the travel rule" + }, + "notificationEmail": { + "type": "string", + "description": "The email address where a notification should be sent upon completion of the travel rule" + }, + "skipBeneficiaryDataValidation": { + "type": "boolean", + "description": "Whether to skip validation of beneficiary data" + }, + "travelRuleBehavior": { + "type": "boolean", + "description": "Whether to check if the transaction is a TRAVEL_RULE in the beneficiary VASP's jurisdiction" + }, + "originatorProof": { + "description": "Ownership proof related to the originator of the transaction", + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "passport", + "description": "Type of ownership proof" + }, + "id": { + "type": "string", + "example": "123456789", + "description": "Identification number" + }, + "name": { + "type": "string", + "example": "Alice", + "description": "Name of owner" + }, + "country": { + "type": "string", + "example": "US", + "description": "Country of issuance" + }, + "issueDate": { + "type": "string", + "example": "2022-01-01", + "description": "Date of issuance" + }, + "issuer": { + "type": "string", + "example": "US Government", + "description": "Name of issuing entity" + } + } + }, + "beneficiaryProof": { + "description": "Ownership proof related to the beneficiary of the transaction", + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "passport", + "description": "Type of ownership proof" + }, + "id": { + "type": "string", + "example": "123456789", + "description": "Identification number" + }, + "name": { + "type": "string", + "example": "Alice", + "description": "Name of owner" + }, + "country": { + "type": "string", + "example": "US", + "description": "Country of issuance" + }, + "issueDate": { + "type": "string", + "example": "2022-01-01", + "description": "Date of issuance" + }, + "issuer": { + "type": "string", + "example": "US Government", + "description": "Name of issuing entity" + } + } + }, + "pii": { + "description": "Personal identifiable information related to the transaction", + "type": "object", + "properties": { + "fullName": { + "type": "string" + }, + "dateOfBirth": { + "type": "string" + }, + "placeOfBirth": { + "type": "string" + }, + "address": { + "type": "string" + }, + "identificationNumber": { + "type": "string" + }, + "nationality": { + "type": "string" + }, + "countryOfResidence": { + "type": "string" + }, + "taxIdentificationNumber": { + "type": "string" + }, + "customerNumber": { + "type": "string" + } + } + } + }, + "required": [ + "transactionAsset", + "transactionAmount", + "originatorDid", + "beneficiaryDid", + "originatorVASPdid", + "beneficiaryVASPdid", + "beneficiaryVASPname", + "transactionBlockchainInfo", + "originator", + "beneficiary", + "encrypted", + "protocol", + "notificationEmail", + "skipBeneficiaryDataValidation", + "travelRuleBehavior", + "originatorProof", + "beneficiaryProof", + "pii" + ] + } + ], + "output": { + "type": "object", + "properties": { + "isValid": { + "type": "boolean", + "description": "\"isValid\" will tell you if you have collected all the information needed for the travel rule data transfer. Once this field = \"true\", you can move on to the next step which is to transfer the front-end information to your back-end and perform Travel Rule Transaction create" + }, + "type": { + "type": "string", + "description": "\"type\" will tell you if the virtual asset value converted to FIAT value of the withdrawal request is above (=TRAVELRULE) or below (=BELOW_THRESHOLD) the threshold in your jurisdiction. If it is to an unhosted wallet which does not require travel rule information to be sent and only collected, it will say NON_CUSTODIAL.", + "example": "TRAVELRULE" + }, + "beneficiaryAddressType": { + "type": "string", + "description": "\"beneficiaryAddressType\" will tell you if your blockchain analytics provider or internal address book has been able to identify the wallet address.", + "example": "UNKNOWN" + }, + "addressSource": { + "type": "string", + "description": "\"addressSource\" will tell you if the address was found in your internal address book or identified by the blockchain analytics provider.", + "example": "UNKNOWN" + }, + "beneficiaryVASPdid": { + "type": "string", + "description": "The VASP DID of the beneficiary VASP", + "example": "did:ethr:0x46a7ed5813ce735387df2bfb245bd7722e0de992" + }, + "beneficiaryVASPname": { + "type": "string", + "description": "\"beneficiaryVASPname\" will tell you the name of the VASP that has been identified as the owner of the wallet address. This name is used in a subsequent call to get its DID.", + "example": "Fireblocks" + }, + "warnings": { + "description": "\"errors/warnings\" will tell you what information about the beneficiary you need to collect from the sender.", + "example": [ + "optional-beneficiaryAccountNumber" + ], + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "isValid", + "type", + "beneficiaryAddressType", + "addressSource", + "beneficiaryVASPdid", + "beneficiaryVASPname", + "warnings" + ] + }, + "description": "Validate Full Travel Rule Transaction.\n\nValidate Full Travel Rule transactions.\n\nChecks for all required information on the originator and beneficiary VASPs.\n\n**Note:** The reference content in this section documents the Travel Rule beta endpoint. The beta endpoint includes APIs that are currently in preview and aren't yet generally available.\n\nTo enroll in the beta and enable this endpoint, contact your Fireblocks Customer Success Manager or send an email to [CSM@fireblocks.com](mailto:CSM@fireblocks.com)." + }, + { + "method": "get", + "path": "/screening/travel_rule/vasp/{did}", + "name": "screening_travel_rule_vasp_getByDid", + "parameters": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "order": { + "type": "string", + "description": "Field to order by" + }, + "per_page": { + "type": "number", + "description": "Records per page" + }, + "page": { + "type": "number", + "description": "Page number" + }, + "fields": { + "type": "string", + "description": "CSV of fields to return (all, \"blank\" or see list of all field names below)" + } + }, + "required": [] + } + ], + "output": { + "type": "object", + "properties": { + "did": { + "type": "string" + }, + "name": { + "type": "string" + }, + "verificationStatus": { + "type": "string" + }, + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "emailDomains": { + "type": "string" + }, + "website": { + "type": "string" + }, + "logo": { + "type": "string" + }, + "legalStructure": { + "type": "string" + }, + "legalName": { + "type": "string" + }, + "yearFounded": { + "type": "string" + }, + "incorporationCountry": { + "type": "string" + }, + "isRegulated": { + "type": "string" + }, + "otherNames": { + "type": "string" + }, + "identificationType": { + "type": "string" + }, + "identificationCountry": { + "type": "string" + }, + "businessNumber": { + "type": "string" + }, + "regulatoryAuthorities": { + "type": "string" + }, + "jurisdictions": { + "type": "string" + }, + "street": { + "type": "string" + }, + "number": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "postCode": { + "type": "string" + }, + "state": { + "type": "string" + }, + "certificates": { + "type": "string" + }, + "description": { + "type": "string" + }, + "travelRule_OPENVASP": { + "type": "string" + }, + "travelRule_SYGNA": { + "type": "string" + }, + "travelRule_TRISA": { + "type": "string" + }, + "travelRule_TRLIGHT": { + "type": "string" + }, + "travelRule_EMAIL": { + "type": "string" + }, + "travelRule_TRP": { + "type": "string" + }, + "travelRule_SHYFT": { + "type": "string" + }, + "travelRule_USTRAVELRULEWG": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "lastSentDate": { + "type": "string" + }, + "lastReceivedDate": { + "type": "string" + }, + "documents": { + "type": "string" + }, + "hasAdmin": { + "type": "boolean" + }, + "isNotifiable": { + "type": "boolean" + }, + "issuers": { + "type": "object", + "properties": { + "yearFounded": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "isRegulated": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "regulatoryAuthorities": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "name": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "logo": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "website": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "legalName": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "legalStructure": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "incorporationCountry": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "businessNumber": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "addressLine1": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "city": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "country": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "description": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + } + }, + "required": [ + "yearFounded", + "isRegulated", + "regulatoryAuthorities", + "name", + "logo", + "website", + "legalName", + "legalStructure", + "incorporationCountry", + "businessNumber", + "addressLine1", + "city", + "country", + "description" + ] + } + }, + "required": [ + "did", + "name", + "verificationStatus", + "addressLine1", + "addressLine2", + "city", + "country", + "emailDomains", + "website", + "logo", + "legalStructure", + "legalName", + "yearFounded", + "incorporationCountry", + "isRegulated", + "otherNames", + "identificationType", + "identificationCountry", + "businessNumber", + "regulatoryAuthorities", + "jurisdictions", + "street", + "number", + "unit", + "postCode", + "state", + "certificates", + "description", + "travelRule_OPENVASP", + "travelRule_SYGNA", + "travelRule_TRISA", + "travelRule_TRLIGHT", + "travelRule_EMAIL", + "travelRule_TRP", + "travelRule_SHYFT", + "travelRule_USTRAVELRULEWG", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "lastSentDate", + "lastReceivedDate", + "documents", + "hasAdmin", + "isNotifiable", + "issuers" + ] + }, + "description": "Get VASP details.\n\nGet VASP Details.\n\nReturns information about a VASP that has the specified DID.\n\n**Note:** The reference content in this section documents the Travel Rule beta endpoint. The beta endpoint includes APIs that are currently in preview and aren't yet generally available.\n\nTo enroll in the beta and enable this endpoint, contact your Fireblocks Customer Success Manager or send an email to [CSM@fireblocks.com](mailto:CSM@fireblocks.com)." + }, + { + "method": "get", + "path": "/screening/travel_rule/vasp", + "name": "screening_travel_rule_vasp_get", + "parameters": [ + { + "type": "object", + "properties": { + "order": { + "type": "string", + "description": "Field to order by" + }, + "per_page": { + "type": "number", + "description": "Records per page" + }, + "page": { + "type": "number", + "description": "Page number" + }, + "fields": { + "type": "string", + "description": "CSV of fields to return (all, \"blank\" or see list of all field names below)" + } + }, + "required": [] + } + ], + "output": { + "type": "object", + "properties": { + "vasps": { + "type": "array", + "items": { + "type": "object", + "properties": { + "did": { + "type": "string" + }, + "name": { + "type": "string" + }, + "verificationStatus": { + "type": "string" + }, + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "emailDomains": { + "type": "string" + }, + "website": { + "type": "string" + }, + "logo": { + "type": "string" + }, + "legalStructure": { + "type": "string" + }, + "legalName": { + "type": "string" + }, + "yearFounded": { + "type": "string" + }, + "incorporationCountry": { + "type": "string" + }, + "isRegulated": { + "type": "string" + }, + "otherNames": { + "type": "string" + }, + "identificationType": { + "type": "string" + }, + "identificationCountry": { + "type": "string" + }, + "businessNumber": { + "type": "string" + }, + "regulatoryAuthorities": { + "type": "string" + }, + "jurisdictions": { + "type": "string" + }, + "street": { + "type": "string" + }, + "number": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "postCode": { + "type": "string" + }, + "state": { + "type": "string" + }, + "certificates": { + "type": "string" + }, + "description": { + "type": "string" + }, + "travelRule_OPENVASP": { + "type": "string" + }, + "travelRule_SYGNA": { + "type": "string" + }, + "travelRule_TRISA": { + "type": "string" + }, + "travelRule_TRLIGHT": { + "type": "string" + }, + "travelRule_EMAIL": { + "type": "string" + }, + "travelRule_TRP": { + "type": "string" + }, + "travelRule_SHYFT": { + "type": "string" + }, + "travelRule_USTRAVELRULEWG": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "lastSentDate": { + "type": "string" + }, + "lastReceivedDate": { + "type": "string" + }, + "documents": { + "type": "string" + }, + "hasAdmin": { + "type": "boolean" + }, + "isNotifiable": { + "type": "boolean" + }, + "issuers": { + "type": "object", + "properties": { + "yearFounded": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "isRegulated": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "regulatoryAuthorities": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "name": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "logo": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "website": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "legalName": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "legalStructure": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "incorporationCountry": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "businessNumber": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "addressLine1": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "city": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "country": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "description": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + } + }, + "required": [ + "yearFounded", + "isRegulated", + "regulatoryAuthorities", + "name", + "logo", + "website", + "legalName", + "legalStructure", + "incorporationCountry", + "businessNumber", + "addressLine1", + "city", + "country", + "description" + ] + } + }, + "required": [ + "did", + "name", + "verificationStatus", + "addressLine1", + "addressLine2", + "city", + "country", + "emailDomains", + "website", + "logo", + "legalStructure", + "legalName", + "yearFounded", + "incorporationCountry", + "isRegulated", + "otherNames", + "identificationType", + "identificationCountry", + "businessNumber", + "regulatoryAuthorities", + "jurisdictions", + "street", + "number", + "unit", + "postCode", + "state", + "certificates", + "description", + "travelRule_OPENVASP", + "travelRule_SYGNA", + "travelRule_TRISA", + "travelRule_TRLIGHT", + "travelRule_EMAIL", + "travelRule_TRP", + "travelRule_SHYFT", + "travelRule_USTRAVELRULEWG", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "lastSentDate", + "lastReceivedDate", + "documents", + "hasAdmin", + "isNotifiable", + "issuers" + ] + } + } + }, + "required": [ + "vasps" + ] + }, + "description": "Get All VASPs.\n\nReturns a list of VASPs. VASPs can be searched and sorted and results are paginated.\n\n**Note:** The reference content in this section documents the Travel Rule beta endpoint. The beta endpoint includes APIs that are currently in preview and aren't yet generally available.\n\nTo enroll in the beta and enable this endpoint, contact your Fireblocks Customer Success Manager or send an email to [CSM@fireblocks.com](mailto:CSM@fireblocks.com)." + }, + { + "method": "put", + "path": "/screeening/travel_rule/vasp/update", + "name": "screeening_travel_rule_vasp_update_put", + "parameters": [ + { + "type": "object", + "properties": { + "did": { + "type": "string", + "example": "did:ethr:0x44957e75d6ce4a5bf37aae117da86422c848f7c2", + "description": "The decentralized identifier of the VASP" + }, + "pii_didkey": { + "type": "string", + "example": "did:key:z6Mks5CZRaiooKYhq5TwtXQC1gWhwiZnmiKfFrMnYY62MhYf", + "description": "The PII DID key of the VASP" + } + }, + "required": [ + "did", + "pii_didkey" + ] + } + ], + "output": { + "type": "object", + "properties": { + "did": { + "type": "string", + "example": "did:ethr:0x44957e75d6ce4a5bf37aae117da86422c848f7c2", + "description": "The decentralized identifier of the VASP" + }, + "pii_didkey": { + "type": "string", + "example": "did:key:z6Mks5CZRaiooKYhq5TwtXQC1gWhwiZnmiKfFrMnYY62MhYf", + "description": "The PII DID key of the VASP" + } + }, + "required": [ + "did", + "pii_didkey" + ] + }, + "description": "Add jsonDidKey to VASP details.\n\nUpdate VASP Details.\n\nUpdates a VASP with the provided parameters. Use this endpoint to add your public jsonDIDkey generated by Notabene.\n\n**Note:** The reference content in this section documents the Travel Rule beta endpoint. The beta endpoint includes APIs that are currently in preview and aren't yet generally available.\n\nTo enroll in the beta and enable this endpoint, contact your Fireblocks Customer Success Manager or send an email to [CSM@fireblocks.com](mailto:CSM@fireblocks.com)." + }, + { + "method": "get", + "path": "/tap/active_policy", + "name": "tap_active_policy_get", + "parameters": [], + "output": { + "type": "object", + "description": "Policy validation", + "properties": { + "policy": { + "type": "object", + "description": "Response object for policy operations", + "properties": { + "rules": { + "type": "array", + "description": "A set of policy rules", + "items": { + "type": "object", + "description": "Policy rule which is enforced on transactions", + "properties": { + "operator": { + "type": "string", + "description": "(deprecated - replaced by \"operators\") | Defines users who can initiate the type of transaction to which the rule applies. options are * \"*\" - All users are allowed * Specific User id", + "deprecated": true + }, + "operators": { + "type": "object", + "description": "Defines users/groups who can initiate the type of transaction to which the rule applies.", + "properties": { + "wildcard": { + "type": "string", + "enum": [ + "*" + ], + "description": "If used then this property should appear as the only child property\n* \"*\" - All users are allowed\n" + }, + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + }, + "services": { + "type": "array", + "description": "set of services to initiate transactions", + "items": { + "type": "string" + } + } + } + }, + "transactionType": { + "type": "string", + "enum": [ + "TRANSFER", + "CONTRACT_CALL", + "APPROVE", + "MINT", + "BURN", + "SUPPLY", + "REDEEM", + "STAKE", + "RAW", + "TYPED_MESSAGE" + ], + "description": "Defines the type of transaction to which the rule applies.\n * TRANSFER - Default. Transfers funds from one account to another\n * CONTRACT_CALL - Calls a smart contract, mainly for DeFi operations.\n * APPROVE - Allows a smart contract to withdraw from a designated wallet.\n * MINT - Perform a mint operation (increase supply) on a supported token\n * BURN - Perform a burn operation (reduce supply) on a supported token\n * SUPPLY - Use for DeFi to lend assets\n * REDEEM - Use for DeFi to get lending back\n * STAKE - Allows you to allocate and lock certain assets for earning staking rewards.\n * RAW - An off-chain message with no predefined format, use it to sign any message with your private key.\n * TYPED_MESSAGE - An off-chain message type that follows a predefined format, used to sign specific messages that are not actual transactions.\n" + }, + "designatedSigner": { + "type": "string", + "description": "(deprecated - replaced by \"designatedSigners\") Id representing the user who signs transactions that match a specific rule", + "deprecated": true + }, + "designatedSigners": { + "type": "object", + "description": "Set of ids representing the users who signs transactions that match a specific rule", + "properties": { + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "TRANSFER" + ], + "description": "Policy rule type" + }, + "action": { + "type": "string", + "enum": [ + "ALLOW", + "BLOCK", + "2-TIER" + ], + "description": "Defines what occurs when a transaction meets the rule's criteria\n* ALLOW - The transaction goes through and can be signed without requiring additional approvals\n* BLOCK - The transaction is automatically blocked\n* 2-TIER - Only these users or user groups can approve \n If any of them reject the transaction before the required approval threshold is met, the transaction doesn't go through\n The list of entities are set is \"authorizationGroups\" field\n" + }, + "asset": { + "type": "string", + "description": "Defines the type of asset being transacted, options are\n* \"*\" - All assets\n* Specific asset\n" + }, + "srcType": { + "description": "(deprecated - replaced by \"src\") source account type" + }, + "srcSubType": { + "description": "(deprecated - replaced by \"src\") source sub account type" + }, + "srcId": { + "description": "(deprecated - replaced by \"src\") source account id" + }, + "src": { + "type": "object", + "description": "Defines source accounts the rule allows transfers to originate from", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstType": { + "description": "(deprecated - replaced by \"dst\") destination account type" + }, + "dstSubType": { + "description": "(deprecated - replaced by \"dst\") destination sub account type" + }, + "dstId": { + "description": "(deprecated - replaced by \"dst\") destination account id" + }, + "dst": { + "type": "object", + "description": "Defines the destination accounts the rule allows transfers to", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstAddressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME", + "*" + ], + "description": "Defines whether the destination to which you are sending funds must be whitelisted, to allow one-time transfers to non-whitelisted external addresses, or both.\nBy default, you can only transfer to an external address after it’s whitelisted.\n * WHITELISTED - Can only be sent to whitelisted addresses.\n * ONE_TIME - Can only be sent to non-whitelisted external addresses.\n * \"*\" - can be sent to whitelisted addresses or non-whitelisted external\n" + }, + "amountCurrency": { + "type": "string", + "enum": [ + "USD", + "EUR", + "NATIVE" + ], + "description": "* USD - Limits the amount of any asset users can transfer based on the USD equivalent of the asset.\n* EUR - Limits the amount of any asset users can transfer based on the EURO equivalent of the asset.\n* NATIVE - Limits the amount of an asset a user can transfer when using a specific asset.\n" + }, + "amountScope": { + "type": "string", + "enum": [ + "SINGLE_TX", + "TIMEFRAME" + ], + "description": "* SINGLE_TX - limit applies to a single transaction\n* TIMEFRAME - limit applies to all transactions within the defined time period\n" + }, + "amount": { + "type": "number", + "description": "Defines the value a transaction must exceed for the rule to apply to it (according to the amountCurrency field)" + }, + "periodSec": { + "type": "number", + "description": "Time period in seconds applied by the amountScope field to accumulate transferred amounts in transactions that match the rule, until the total exceeds the value you specify under Minimum.\nWhen the specified amount is reached within that period, whether by one or many transactions, further transactions in that period either fail or require more approvals.\n" + }, + "authorizers": { + "type": "array", + "description": "(deprecated - replaced by \"authorizationGroups\") Allowed entities which can approves a transaction", + "deprecated": true, + "items": { + "type": "string" + } + }, + "authorizersCount": { + "type": "number", + "description": "(deprecated - replaced by \"authorizationGroups\") Min amount of entities which are needed to approve a transaction", + "deprecated": true + }, + "authorizationGroups": { + "type": "object", + "description": "Defines the transaction approval terms", + "properties": { + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ], + "description": "* AND - requires approval of all authorization groups\n* OR - requires approval of at least one of the authorization groups\n" + }, + "allowOperatorAsAuthorizer": { + "type": "boolean", + "description": "Defines whether the user who initiates a transaction can approve their own transaction and count toward the approval threshold for their transaction" + }, + "groups": { + "type": "array", + "description": "Groups of entities which can approve the transaction", + "items": { + "type": "object", + "properties": { + "users": { + "type": "array", + "description": "User ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Group ids", + "items": { + "type": "string" + } + }, + "th": { + "type": "number", + "description": "Represents the min amount of entities which are required to approve the transaction, default is 1." + } + } + } + } + } + }, + "amountAggregation": { + "type": "object", + "description": "Defines the method by which the Policy Engine calculates accumulation.\nIt uses the Initiator, Source, and Destination to calculate accumulation toward the value under Minimum, for the time under Time Period.\n", + "properties": { + "operators": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "srcTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "dstTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + } + } + }, + "rawMessageSigning": { + "type": "object", + "description": "Raw message signing configuration", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "object", + "properties": { + "path": { + "type": "array", + "items": { + "type": "number" + } + } + } + } + } + }, + "applyForApprove": { + "type": "boolean", + "description": "Applying this rule over APPROVE type transactions (can only be enabled when rule's transaction type is TRANSFER)" + }, + "applyForTypedMessage": { + "type": "boolean", + "description": "Applying this rule over TYPED_MESSAGE type transactions (can only be enabled when rule's transaction type is CONTRACT_CALL)" + }, + "externalDescriptor": { + "type": "string", + "description": "A unique id identifying the rule" + } + }, + "required": [ + "type", + "action", + "asset", + "amountCurrency", + "amountScope", + "amount", + "periodSec", + "externalDescriptor" + ] + } + }, + "metadata": { + "type": "object", + "description": "Policy related metadata", + "properties": { + "editedBy": { + "type": "string", + "description": "The user id of the user who last edited the policy" + }, + "editedAt": { + "type": "string", + "description": "The timestamp of the last edit of the policy" + }, + "publishedBy": { + "type": "string", + "description": "The user id of the user who last published the policy" + }, + "publishedAt": { + "type": "string", + "description": "The timestamp of the last publish of the policy" + } + } + } + }, + "required": [ + "rules", + "metadata" + ] + }, + "validation": { + "type": "object", + "description": "Policy validation object", + "properties": { + "status": { + "type": "string", + "description": "Validation status" + }, + "checkResult": { + "type": "object", + "description": "Policy rules validation result", + "properties": { + "errors": { + "type": "number", + "description": "Number of errors" + }, + "result": { + "type": "array", + "description": "A set of validation results", + "items": { + "type": "object", + "description": "The rule validation result", + "properties": { + "index": { + "type": "number", + "description": "Rule index number in the policy" + }, + "status": { + "type": "string", + "enum": [ + "ok", + "failure" + ], + "description": "Validation status" + }, + "errors": { + "type": "array", + "description": "A set of rule validation error objects", + "items": { + "type": "object", + "description": "Rule validation result error", + "properties": { + "errorMessage": { + "type": "string", + "description": "Error message" + }, + "errorCode": { + "type": "number", + "description": "error code" + }, + "errorCodeName": { + "type": "string", + "description": "error code name" + }, + "errorField": { + "type": "string", + "enum": [ + "operator", + "operators", + "authorizationGroups", + "designatedSigner", + "designatedSigners", + "contractMethods", + "amountAggregation", + "src", + "dst" + ], + "description": "The field which the error relates to\n* operator - transaction initiator\n* operators - transaction initiators\n* authorizationGroups - transaction authorizer groups\n* designatedSigner - transaction signer\n* designatedSigners - transaction signers\n* contractMethods - contract methods\n* amountAggregation - transaction amount aggregation configuration\n* src - transaction source asset configuration\n* dst - transaction destination asset configuration\n" + } + }, + "required": [ + "errorMessage", + "errorCode", + "errorCodeName", + "errorField" + ] + } + } + }, + "required": [ + "index", + "status", + "errors" + ] + } + } + }, + "required": [ + "errors", + "result" + ] + } + }, + "required": [ + "status", + "checkResult" + ] + } + }, + "required": [ + "policy", + "validation" + ] + }, + "description": "Get the active policy and its validation.\n\nReturns the active policy and its validation.
\n**Note:** These endpoints are currently in beta and might be subject to changes.\nIf you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "get", + "path": "/tap/draft", + "name": "tap_draft_get", + "parameters": [], + "output": { + "type": "object", + "description": "Draft validation", + "properties": { + "draftResponse": { + "type": "object", + "description": "Response object for draft operations", + "properties": { + "status": { + "type": "string", + "description": "Operation status" + }, + "rules": { + "type": "array", + "description": "Draft rules", + "items": { + "type": "object", + "description": "Policy rule which is enforced on transactions", + "properties": { + "operator": { + "type": "string", + "description": "(deprecated - replaced by \"operators\") | Defines users who can initiate the type of transaction to which the rule applies. options are * \"*\" - All users are allowed * Specific User id", + "deprecated": true + }, + "operators": { + "type": "object", + "description": "Defines users/groups who can initiate the type of transaction to which the rule applies.", + "properties": { + "wildcard": { + "type": "string", + "enum": [ + "*" + ], + "description": "If used then this property should appear as the only child property\n* \"*\" - All users are allowed\n" + }, + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + }, + "services": { + "type": "array", + "description": "set of services to initiate transactions", + "items": { + "type": "string" + } + } + } + }, + "transactionType": { + "type": "string", + "enum": [ + "TRANSFER", + "CONTRACT_CALL", + "APPROVE", + "MINT", + "BURN", + "SUPPLY", + "REDEEM", + "STAKE", + "RAW", + "TYPED_MESSAGE" + ], + "description": "Defines the type of transaction to which the rule applies.\n * TRANSFER - Default. Transfers funds from one account to another\n * CONTRACT_CALL - Calls a smart contract, mainly for DeFi operations.\n * APPROVE - Allows a smart contract to withdraw from a designated wallet.\n * MINT - Perform a mint operation (increase supply) on a supported token\n * BURN - Perform a burn operation (reduce supply) on a supported token\n * SUPPLY - Use for DeFi to lend assets\n * REDEEM - Use for DeFi to get lending back\n * STAKE - Allows you to allocate and lock certain assets for earning staking rewards.\n * RAW - An off-chain message with no predefined format, use it to sign any message with your private key.\n * TYPED_MESSAGE - An off-chain message type that follows a predefined format, used to sign specific messages that are not actual transactions.\n" + }, + "designatedSigner": { + "type": "string", + "description": "(deprecated - replaced by \"designatedSigners\") Id representing the user who signs transactions that match a specific rule", + "deprecated": true + }, + "designatedSigners": { + "type": "object", + "description": "Set of ids representing the users who signs transactions that match a specific rule", + "properties": { + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "TRANSFER" + ], + "description": "Policy rule type" + }, + "action": { + "type": "string", + "enum": [ + "ALLOW", + "BLOCK", + "2-TIER" + ], + "description": "Defines what occurs when a transaction meets the rule's criteria\n* ALLOW - The transaction goes through and can be signed without requiring additional approvals\n* BLOCK - The transaction is automatically blocked\n* 2-TIER - Only these users or user groups can approve \n If any of them reject the transaction before the required approval threshold is met, the transaction doesn't go through\n The list of entities are set is \"authorizationGroups\" field\n" + }, + "asset": { + "type": "string", + "description": "Defines the type of asset being transacted, options are\n* \"*\" - All assets\n* Specific asset\n" + }, + "srcType": { + "description": "(deprecated - replaced by \"src\") source account type" + }, + "srcSubType": { + "description": "(deprecated - replaced by \"src\") source sub account type" + }, + "srcId": { + "description": "(deprecated - replaced by \"src\") source account id" + }, + "src": { + "type": "object", + "description": "Defines source accounts the rule allows transfers to originate from", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstType": { + "description": "(deprecated - replaced by \"dst\") destination account type" + }, + "dstSubType": { + "description": "(deprecated - replaced by \"dst\") destination sub account type" + }, + "dstId": { + "description": "(deprecated - replaced by \"dst\") destination account id" + }, + "dst": { + "type": "object", + "description": "Defines the destination accounts the rule allows transfers to", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstAddressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME", + "*" + ], + "description": "Defines whether the destination to which you are sending funds must be whitelisted, to allow one-time transfers to non-whitelisted external addresses, or both.\nBy default, you can only transfer to an external address after it’s whitelisted.\n * WHITELISTED - Can only be sent to whitelisted addresses.\n * ONE_TIME - Can only be sent to non-whitelisted external addresses.\n * \"*\" - can be sent to whitelisted addresses or non-whitelisted external\n" + }, + "amountCurrency": { + "type": "string", + "enum": [ + "USD", + "EUR", + "NATIVE" + ], + "description": "* USD - Limits the amount of any asset users can transfer based on the USD equivalent of the asset.\n* EUR - Limits the amount of any asset users can transfer based on the EURO equivalent of the asset.\n* NATIVE - Limits the amount of an asset a user can transfer when using a specific asset.\n" + }, + "amountScope": { + "type": "string", + "enum": [ + "SINGLE_TX", + "TIMEFRAME" + ], + "description": "* SINGLE_TX - limit applies to a single transaction\n* TIMEFRAME - limit applies to all transactions within the defined time period\n" + }, + "amount": { + "type": "number", + "description": "Defines the value a transaction must exceed for the rule to apply to it (according to the amountCurrency field)" + }, + "periodSec": { + "type": "number", + "description": "Time period in seconds applied by the amountScope field to accumulate transferred amounts in transactions that match the rule, until the total exceeds the value you specify under Minimum.\nWhen the specified amount is reached within that period, whether by one or many transactions, further transactions in that period either fail or require more approvals.\n" + }, + "authorizers": { + "type": "array", + "description": "(deprecated - replaced by \"authorizationGroups\") Allowed entities which can approves a transaction", + "deprecated": true, + "items": { + "type": "string" + } + }, + "authorizersCount": { + "type": "number", + "description": "(deprecated - replaced by \"authorizationGroups\") Min amount of entities which are needed to approve a transaction", + "deprecated": true + }, + "authorizationGroups": { + "type": "object", + "description": "Defines the transaction approval terms", + "properties": { + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ], + "description": "* AND - requires approval of all authorization groups\n* OR - requires approval of at least one of the authorization groups\n" + }, + "allowOperatorAsAuthorizer": { + "type": "boolean", + "description": "Defines whether the user who initiates a transaction can approve their own transaction and count toward the approval threshold for their transaction" + }, + "groups": { + "type": "array", + "description": "Groups of entities which can approve the transaction", + "items": { + "type": "object", + "properties": { + "users": { + "type": "array", + "description": "User ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Group ids", + "items": { + "type": "string" + } + }, + "th": { + "type": "number", + "description": "Represents the min amount of entities which are required to approve the transaction, default is 1." + } + } + } + } + } + }, + "amountAggregation": { + "type": "object", + "description": "Defines the method by which the Policy Engine calculates accumulation.\nIt uses the Initiator, Source, and Destination to calculate accumulation toward the value under Minimum, for the time under Time Period.\n", + "properties": { + "operators": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "srcTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "dstTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + } + } + }, + "rawMessageSigning": { + "type": "object", + "description": "Raw message signing configuration", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "object", + "properties": { + "path": { + "type": "array", + "items": { + "type": "number" + } + } + } + } + } + }, + "applyForApprove": { + "type": "boolean", + "description": "Applying this rule over APPROVE type transactions (can only be enabled when rule's transaction type is TRANSFER)" + }, + "applyForTypedMessage": { + "type": "boolean", + "description": "Applying this rule over TYPED_MESSAGE type transactions (can only be enabled when rule's transaction type is CONTRACT_CALL)" + }, + "externalDescriptor": { + "type": "string", + "description": "A unique id identifying the rule" + } + }, + "required": [ + "type", + "action", + "asset", + "amountCurrency", + "amountScope", + "amount", + "periodSec", + "externalDescriptor" + ] + } + }, + "draftId": { + "type": "string", + "description": "Draft unique id" + }, + "metadata": { + "type": "object", + "description": "Policy related metadata", + "properties": { + "editedBy": { + "type": "string", + "description": "The user id of the user who last edited the policy" + }, + "editedAt": { + "type": "string", + "description": "The timestamp of the last edit of the policy" + }, + "publishedBy": { + "type": "string", + "description": "The user id of the user who last published the policy" + }, + "publishedAt": { + "type": "string", + "description": "The timestamp of the last publish of the policy" + } + } + } + }, + "required": [ + "draftId", + "status", + "rules", + "metadata" + ] + }, + "validation": { + "type": "object", + "description": "Policy validation object", + "properties": { + "status": { + "type": "string", + "description": "Validation status" + }, + "checkResult": { + "type": "object", + "description": "Policy rules validation result", + "properties": { + "errors": { + "type": "number", + "description": "Number of errors" + }, + "result": { + "type": "array", + "description": "A set of validation results", + "items": { + "type": "object", + "description": "The rule validation result", + "properties": { + "index": { + "type": "number", + "description": "Rule index number in the policy" + }, + "status": { + "type": "string", + "enum": [ + "ok", + "failure" + ], + "description": "Validation status" + }, + "errors": { + "type": "array", + "description": "A set of rule validation error objects", + "items": { + "type": "object", + "description": "Rule validation result error", + "properties": { + "errorMessage": { + "type": "string", + "description": "Error message" + }, + "errorCode": { + "type": "number", + "description": "error code" + }, + "errorCodeName": { + "type": "string", + "description": "error code name" + }, + "errorField": { + "type": "string", + "enum": [ + "operator", + "operators", + "authorizationGroups", + "designatedSigner", + "designatedSigners", + "contractMethods", + "amountAggregation", + "src", + "dst" + ], + "description": "The field which the error relates to\n* operator - transaction initiator\n* operators - transaction initiators\n* authorizationGroups - transaction authorizer groups\n* designatedSigner - transaction signer\n* designatedSigners - transaction signers\n* contractMethods - contract methods\n* amountAggregation - transaction amount aggregation configuration\n* src - transaction source asset configuration\n* dst - transaction destination asset configuration\n" + } + }, + "required": [ + "errorMessage", + "errorCode", + "errorCodeName", + "errorField" + ] + } + } + }, + "required": [ + "index", + "status", + "errors" + ] + } + } + }, + "required": [ + "errors", + "result" + ] + } + }, + "required": [ + "status", + "checkResult" + ] + } + }, + "required": [ + "draftResponse", + "validation" + ] + }, + "description": "Get the active draft.\n\nReturns the active draft and its validation.
\n**Note:** These endpoints are currently in beta and might be subject to changes.\nIf you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "post", + "path": "/tap/draft", + "name": "tap_draft_post", + "parameters": [ + {} + ], + "output": { + "type": "object", + "description": "Response object of the publish policy operation", + "properties": { + "status": { + "type": "string", + "enum": [ + "SUCCESS", + "UNVALIDATED", + "INVALID_CONFIGURATION", + "PENDING", + "PENDING_CONSOLE_APPROVAL", + "AWAITING_QUORUM", + "UNHANDLED_ERROR" + ], + "description": "* SUCCESS - success\n* UNVALIDATED - not validated yet\n* INVALID_CONFIGURATION - at least one rule is invalid\n* PENDING - pending approval\n* PENDING_CONSOLE_APPROVAL - pending approval from the console app\n* AWAITING_QUORUM - pending quorum approval\n* UNHANDLED_ERROR - unhandled error\n" + }, + "rules": { + "type": "array", + "items": { + "type": "object", + "description": "Policy rule which is enforced on transactions", + "properties": { + "operator": { + "type": "string", + "description": "(deprecated - replaced by \"operators\") | Defines users who can initiate the type of transaction to which the rule applies. options are * \"*\" - All users are allowed * Specific User id", + "deprecated": true + }, + "operators": { + "type": "object", + "description": "Defines users/groups who can initiate the type of transaction to which the rule applies.", + "properties": { + "wildcard": { + "type": "string", + "enum": [ + "*" + ], + "description": "If used then this property should appear as the only child property\n* \"*\" - All users are allowed\n" + }, + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + }, + "services": { + "type": "array", + "description": "set of services to initiate transactions", + "items": { + "type": "string" + } + } + } + }, + "transactionType": { + "type": "string", + "enum": [ + "TRANSFER", + "CONTRACT_CALL", + "APPROVE", + "MINT", + "BURN", + "SUPPLY", + "REDEEM", + "STAKE", + "RAW", + "TYPED_MESSAGE" + ], + "description": "Defines the type of transaction to which the rule applies.\n * TRANSFER - Default. Transfers funds from one account to another\n * CONTRACT_CALL - Calls a smart contract, mainly for DeFi operations.\n * APPROVE - Allows a smart contract to withdraw from a designated wallet.\n * MINT - Perform a mint operation (increase supply) on a supported token\n * BURN - Perform a burn operation (reduce supply) on a supported token\n * SUPPLY - Use for DeFi to lend assets\n * REDEEM - Use for DeFi to get lending back\n * STAKE - Allows you to allocate and lock certain assets for earning staking rewards.\n * RAW - An off-chain message with no predefined format, use it to sign any message with your private key.\n * TYPED_MESSAGE - An off-chain message type that follows a predefined format, used to sign specific messages that are not actual transactions.\n" + }, + "designatedSigner": { + "type": "string", + "description": "(deprecated - replaced by \"designatedSigners\") Id representing the user who signs transactions that match a specific rule", + "deprecated": true + }, + "designatedSigners": { + "type": "object", + "description": "Set of ids representing the users who signs transactions that match a specific rule", + "properties": { + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "TRANSFER" + ], + "description": "Policy rule type" + }, + "action": { + "type": "string", + "enum": [ + "ALLOW", + "BLOCK", + "2-TIER" + ], + "description": "Defines what occurs when a transaction meets the rule's criteria\n* ALLOW - The transaction goes through and can be signed without requiring additional approvals\n* BLOCK - The transaction is automatically blocked\n* 2-TIER - Only these users or user groups can approve \n If any of them reject the transaction before the required approval threshold is met, the transaction doesn't go through\n The list of entities are set is \"authorizationGroups\" field\n" + }, + "asset": { + "type": "string", + "description": "Defines the type of asset being transacted, options are\n* \"*\" - All assets\n* Specific asset\n" + }, + "srcType": { + "description": "(deprecated - replaced by \"src\") source account type" + }, + "srcSubType": { + "description": "(deprecated - replaced by \"src\") source sub account type" + }, + "srcId": { + "description": "(deprecated - replaced by \"src\") source account id" + }, + "src": { + "type": "object", + "description": "Defines source accounts the rule allows transfers to originate from", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstType": { + "description": "(deprecated - replaced by \"dst\") destination account type" + }, + "dstSubType": { + "description": "(deprecated - replaced by \"dst\") destination sub account type" + }, + "dstId": { + "description": "(deprecated - replaced by \"dst\") destination account id" + }, + "dst": { + "type": "object", + "description": "Defines the destination accounts the rule allows transfers to", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstAddressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME", + "*" + ], + "description": "Defines whether the destination to which you are sending funds must be whitelisted, to allow one-time transfers to non-whitelisted external addresses, or both.\nBy default, you can only transfer to an external address after it’s whitelisted.\n * WHITELISTED - Can only be sent to whitelisted addresses.\n * ONE_TIME - Can only be sent to non-whitelisted external addresses.\n * \"*\" - can be sent to whitelisted addresses or non-whitelisted external\n" + }, + "amountCurrency": { + "type": "string", + "enum": [ + "USD", + "EUR", + "NATIVE" + ], + "description": "* USD - Limits the amount of any asset users can transfer based on the USD equivalent of the asset.\n* EUR - Limits the amount of any asset users can transfer based on the EURO equivalent of the asset.\n* NATIVE - Limits the amount of an asset a user can transfer when using a specific asset.\n" + }, + "amountScope": { + "type": "string", + "enum": [ + "SINGLE_TX", + "TIMEFRAME" + ], + "description": "* SINGLE_TX - limit applies to a single transaction\n* TIMEFRAME - limit applies to all transactions within the defined time period\n" + }, + "amount": { + "type": "number", + "description": "Defines the value a transaction must exceed for the rule to apply to it (according to the amountCurrency field)" + }, + "periodSec": { + "type": "number", + "description": "Time period in seconds applied by the amountScope field to accumulate transferred amounts in transactions that match the rule, until the total exceeds the value you specify under Minimum.\nWhen the specified amount is reached within that period, whether by one or many transactions, further transactions in that period either fail or require more approvals.\n" + }, + "authorizers": { + "type": "array", + "description": "(deprecated - replaced by \"authorizationGroups\") Allowed entities which can approves a transaction", + "deprecated": true, + "items": { + "type": "string" + } + }, + "authorizersCount": { + "type": "number", + "description": "(deprecated - replaced by \"authorizationGroups\") Min amount of entities which are needed to approve a transaction", + "deprecated": true + }, + "authorizationGroups": { + "type": "object", + "description": "Defines the transaction approval terms", + "properties": { + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ], + "description": "* AND - requires approval of all authorization groups\n* OR - requires approval of at least one of the authorization groups\n" + }, + "allowOperatorAsAuthorizer": { + "type": "boolean", + "description": "Defines whether the user who initiates a transaction can approve their own transaction and count toward the approval threshold for their transaction" + }, + "groups": { + "type": "array", + "description": "Groups of entities which can approve the transaction", + "items": { + "type": "object", + "properties": { + "users": { + "type": "array", + "description": "User ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Group ids", + "items": { + "type": "string" + } + }, + "th": { + "type": "number", + "description": "Represents the min amount of entities which are required to approve the transaction, default is 1." + } + } + } + } + } + }, + "amountAggregation": { + "type": "object", + "description": "Defines the method by which the Policy Engine calculates accumulation.\nIt uses the Initiator, Source, and Destination to calculate accumulation toward the value under Minimum, for the time under Time Period.\n", + "properties": { + "operators": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "srcTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "dstTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + } + } + }, + "rawMessageSigning": { + "type": "object", + "description": "Raw message signing configuration", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "object", + "properties": { + "path": { + "type": "array", + "items": { + "type": "number" + } + } + } + } + } + }, + "applyForApprove": { + "type": "boolean", + "description": "Applying this rule over APPROVE type transactions (can only be enabled when rule's transaction type is TRANSFER)" + }, + "applyForTypedMessage": { + "type": "boolean", + "description": "Applying this rule over TYPED_MESSAGE type transactions (can only be enabled when rule's transaction type is CONTRACT_CALL)" + }, + "externalDescriptor": { + "type": "string", + "description": "A unique id identifying the rule" + } + }, + "required": [ + "type", + "action", + "asset", + "amountCurrency", + "amountScope", + "amount", + "periodSec", + "externalDescriptor" + ] + } + }, + "checkResult": { + "type": "object", + "description": "Policy rules validation result", + "properties": { + "errors": { + "type": "number", + "description": "Number of errors" + }, + "result": { + "type": "array", + "description": "A set of validation results", + "items": { + "type": "object", + "description": "The rule validation result", + "properties": { + "index": { + "type": "number", + "description": "Rule index number in the policy" + }, + "status": { + "type": "string", + "enum": [ + "ok", + "failure" + ], + "description": "Validation status" + }, + "errors": { + "type": "array", + "description": "A set of rule validation error objects", + "items": { + "type": "object", + "description": "Rule validation result error", + "properties": { + "errorMessage": { + "type": "string", + "description": "Error message" + }, + "errorCode": { + "type": "number", + "description": "error code" + }, + "errorCodeName": { + "type": "string", + "description": "error code name" + }, + "errorField": { + "type": "string", + "enum": [ + "operator", + "operators", + "authorizationGroups", + "designatedSigner", + "designatedSigners", + "contractMethods", + "amountAggregation", + "src", + "dst" + ], + "description": "The field which the error relates to\n* operator - transaction initiator\n* operators - transaction initiators\n* authorizationGroups - transaction authorizer groups\n* designatedSigner - transaction signer\n* designatedSigners - transaction signers\n* contractMethods - contract methods\n* amountAggregation - transaction amount aggregation configuration\n* src - transaction source asset configuration\n* dst - transaction destination asset configuration\n" + } + }, + "required": [ + "errorMessage", + "errorCode", + "errorCodeName", + "errorField" + ] + } + } + }, + "required": [ + "index", + "status", + "errors" + ] + } + } + }, + "required": [ + "errors", + "result" + ] + }, + "metadata": { + "type": "object", + "description": "Policy related metadata", + "properties": { + "editedBy": { + "type": "string", + "description": "The user id of the user who last edited the policy" + }, + "editedAt": { + "type": "string", + "description": "The timestamp of the last edit of the policy" + }, + "publishedBy": { + "type": "string", + "description": "The user id of the user who last published the policy" + }, + "publishedAt": { + "type": "string", + "description": "The timestamp of the last publish of the policy" + } + } + } + }, + "required": [ + "status", + "rules", + "checkResult", + "metadata" + ] + }, + "description": "Send publish request for a certain draft id.\n\nSend publish request of certain draft id and returns the response.
\n**Note:** These endpoints are currently in beta and might be subject to changes.\nIf you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "put", + "path": "/tap/draft", + "name": "tap_draft_put", + "parameters": [ + {} + ], + "output": { + "type": "object", + "description": "Draft validation", + "properties": { + "draftResponse": { + "type": "object", + "description": "Response object for draft operations", + "properties": { + "status": { + "type": "string", + "description": "Operation status" + }, + "rules": { + "type": "array", + "description": "Draft rules", + "items": { + "type": "object", + "description": "Policy rule which is enforced on transactions", + "properties": { + "operator": { + "type": "string", + "description": "(deprecated - replaced by \"operators\") | Defines users who can initiate the type of transaction to which the rule applies. options are * \"*\" - All users are allowed * Specific User id", + "deprecated": true + }, + "operators": { + "type": "object", + "description": "Defines users/groups who can initiate the type of transaction to which the rule applies.", + "properties": { + "wildcard": { + "type": "string", + "enum": [ + "*" + ], + "description": "If used then this property should appear as the only child property\n* \"*\" - All users are allowed\n" + }, + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + }, + "services": { + "type": "array", + "description": "set of services to initiate transactions", + "items": { + "type": "string" + } + } + } + }, + "transactionType": { + "type": "string", + "enum": [ + "TRANSFER", + "CONTRACT_CALL", + "APPROVE", + "MINT", + "BURN", + "SUPPLY", + "REDEEM", + "STAKE", + "RAW", + "TYPED_MESSAGE" + ], + "description": "Defines the type of transaction to which the rule applies.\n * TRANSFER - Default. Transfers funds from one account to another\n * CONTRACT_CALL - Calls a smart contract, mainly for DeFi operations.\n * APPROVE - Allows a smart contract to withdraw from a designated wallet.\n * MINT - Perform a mint operation (increase supply) on a supported token\n * BURN - Perform a burn operation (reduce supply) on a supported token\n * SUPPLY - Use for DeFi to lend assets\n * REDEEM - Use for DeFi to get lending back\n * STAKE - Allows you to allocate and lock certain assets for earning staking rewards.\n * RAW - An off-chain message with no predefined format, use it to sign any message with your private key.\n * TYPED_MESSAGE - An off-chain message type that follows a predefined format, used to sign specific messages that are not actual transactions.\n" + }, + "designatedSigner": { + "type": "string", + "description": "(deprecated - replaced by \"designatedSigners\") Id representing the user who signs transactions that match a specific rule", + "deprecated": true + }, + "designatedSigners": { + "type": "object", + "description": "Set of ids representing the users who signs transactions that match a specific rule", + "properties": { + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "TRANSFER" + ], + "description": "Policy rule type" + }, + "action": { + "type": "string", + "enum": [ + "ALLOW", + "BLOCK", + "2-TIER" + ], + "description": "Defines what occurs when a transaction meets the rule's criteria\n* ALLOW - The transaction goes through and can be signed without requiring additional approvals\n* BLOCK - The transaction is automatically blocked\n* 2-TIER - Only these users or user groups can approve \n If any of them reject the transaction before the required approval threshold is met, the transaction doesn't go through\n The list of entities are set is \"authorizationGroups\" field\n" + }, + "asset": { + "type": "string", + "description": "Defines the type of asset being transacted, options are\n* \"*\" - All assets\n* Specific asset\n" + }, + "srcType": { + "description": "(deprecated - replaced by \"src\") source account type" + }, + "srcSubType": { + "description": "(deprecated - replaced by \"src\") source sub account type" + }, + "srcId": { + "description": "(deprecated - replaced by \"src\") source account id" + }, + "src": { + "type": "object", + "description": "Defines source accounts the rule allows transfers to originate from", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstType": { + "description": "(deprecated - replaced by \"dst\") destination account type" + }, + "dstSubType": { + "description": "(deprecated - replaced by \"dst\") destination sub account type" + }, + "dstId": { + "description": "(deprecated - replaced by \"dst\") destination account id" + }, + "dst": { + "type": "object", + "description": "Defines the destination accounts the rule allows transfers to", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstAddressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME", + "*" + ], + "description": "Defines whether the destination to which you are sending funds must be whitelisted, to allow one-time transfers to non-whitelisted external addresses, or both.\nBy default, you can only transfer to an external address after it’s whitelisted.\n * WHITELISTED - Can only be sent to whitelisted addresses.\n * ONE_TIME - Can only be sent to non-whitelisted external addresses.\n * \"*\" - can be sent to whitelisted addresses or non-whitelisted external\n" + }, + "amountCurrency": { + "type": "string", + "enum": [ + "USD", + "EUR", + "NATIVE" + ], + "description": "* USD - Limits the amount of any asset users can transfer based on the USD equivalent of the asset.\n* EUR - Limits the amount of any asset users can transfer based on the EURO equivalent of the asset.\n* NATIVE - Limits the amount of an asset a user can transfer when using a specific asset.\n" + }, + "amountScope": { + "type": "string", + "enum": [ + "SINGLE_TX", + "TIMEFRAME" + ], + "description": "* SINGLE_TX - limit applies to a single transaction\n* TIMEFRAME - limit applies to all transactions within the defined time period\n" + }, + "amount": { + "type": "number", + "description": "Defines the value a transaction must exceed for the rule to apply to it (according to the amountCurrency field)" + }, + "periodSec": { + "type": "number", + "description": "Time period in seconds applied by the amountScope field to accumulate transferred amounts in transactions that match the rule, until the total exceeds the value you specify under Minimum.\nWhen the specified amount is reached within that period, whether by one or many transactions, further transactions in that period either fail or require more approvals.\n" + }, + "authorizers": { + "type": "array", + "description": "(deprecated - replaced by \"authorizationGroups\") Allowed entities which can approves a transaction", + "deprecated": true, + "items": { + "type": "string" + } + }, + "authorizersCount": { + "type": "number", + "description": "(deprecated - replaced by \"authorizationGroups\") Min amount of entities which are needed to approve a transaction", + "deprecated": true + }, + "authorizationGroups": { + "type": "object", + "description": "Defines the transaction approval terms", + "properties": { + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ], + "description": "* AND - requires approval of all authorization groups\n* OR - requires approval of at least one of the authorization groups\n" + }, + "allowOperatorAsAuthorizer": { + "type": "boolean", + "description": "Defines whether the user who initiates a transaction can approve their own transaction and count toward the approval threshold for their transaction" + }, + "groups": { + "type": "array", + "description": "Groups of entities which can approve the transaction", + "items": { + "type": "object", + "properties": { + "users": { + "type": "array", + "description": "User ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Group ids", + "items": { + "type": "string" + } + }, + "th": { + "type": "number", + "description": "Represents the min amount of entities which are required to approve the transaction, default is 1." + } + } + } + } + } + }, + "amountAggregation": { + "type": "object", + "description": "Defines the method by which the Policy Engine calculates accumulation.\nIt uses the Initiator, Source, and Destination to calculate accumulation toward the value under Minimum, for the time under Time Period.\n", + "properties": { + "operators": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "srcTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "dstTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + } + } + }, + "rawMessageSigning": { + "type": "object", + "description": "Raw message signing configuration", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "object", + "properties": { + "path": { + "type": "array", + "items": { + "type": "number" + } + } + } + } + } + }, + "applyForApprove": { + "type": "boolean", + "description": "Applying this rule over APPROVE type transactions (can only be enabled when rule's transaction type is TRANSFER)" + }, + "applyForTypedMessage": { + "type": "boolean", + "description": "Applying this rule over TYPED_MESSAGE type transactions (can only be enabled when rule's transaction type is CONTRACT_CALL)" + }, + "externalDescriptor": { + "type": "string", + "description": "A unique id identifying the rule" + } + }, + "required": [ + "type", + "action", + "asset", + "amountCurrency", + "amountScope", + "amount", + "periodSec", + "externalDescriptor" + ] + } + }, + "draftId": { + "type": "string", + "description": "Draft unique id" + }, + "metadata": { + "type": "object", + "description": "Policy related metadata", + "properties": { + "editedBy": { + "type": "string", + "description": "The user id of the user who last edited the policy" + }, + "editedAt": { + "type": "string", + "description": "The timestamp of the last edit of the policy" + }, + "publishedBy": { + "type": "string", + "description": "The user id of the user who last published the policy" + }, + "publishedAt": { + "type": "string", + "description": "The timestamp of the last publish of the policy" + } + } + } + }, + "required": [ + "draftId", + "status", + "rules", + "metadata" + ] + }, + "validation": { + "type": "object", + "description": "Policy validation object", + "properties": { + "status": { + "type": "string", + "description": "Validation status" + }, + "checkResult": { + "type": "object", + "description": "Policy rules validation result", + "properties": { + "errors": { + "type": "number", + "description": "Number of errors" + }, + "result": { + "type": "array", + "description": "A set of validation results", + "items": { + "type": "object", + "description": "The rule validation result", + "properties": { + "index": { + "type": "number", + "description": "Rule index number in the policy" + }, + "status": { + "type": "string", + "enum": [ + "ok", + "failure" + ], + "description": "Validation status" + }, + "errors": { + "type": "array", + "description": "A set of rule validation error objects", + "items": { + "type": "object", + "description": "Rule validation result error", + "properties": { + "errorMessage": { + "type": "string", + "description": "Error message" + }, + "errorCode": { + "type": "number", + "description": "error code" + }, + "errorCodeName": { + "type": "string", + "description": "error code name" + }, + "errorField": { + "type": "string", + "enum": [ + "operator", + "operators", + "authorizationGroups", + "designatedSigner", + "designatedSigners", + "contractMethods", + "amountAggregation", + "src", + "dst" + ], + "description": "The field which the error relates to\n* operator - transaction initiator\n* operators - transaction initiators\n* authorizationGroups - transaction authorizer groups\n* designatedSigner - transaction signer\n* designatedSigners - transaction signers\n* contractMethods - contract methods\n* amountAggregation - transaction amount aggregation configuration\n* src - transaction source asset configuration\n* dst - transaction destination asset configuration\n" + } + }, + "required": [ + "errorMessage", + "errorCode", + "errorCodeName", + "errorField" + ] + } + } + }, + "required": [ + "index", + "status", + "errors" + ] + } + } + }, + "required": [ + "errors", + "result" + ] + } + }, + "required": [ + "status", + "checkResult" + ] + } + }, + "required": [ + "draftResponse", + "validation" + ] + }, + "description": "Update the draft with a new set of rules.\n\nUpdate the draft and return its validation.
\n**Note:** These endpoints are currently in beta and might be subject to changes.\nIf you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + }, + { + "method": "post", + "path": "/tap/publish", + "name": "tap_publish_post", + "parameters": [ + {} + ], + "output": { + "type": "object", + "description": "Response object of the publish policy operation", + "properties": { + "status": { + "type": "string", + "enum": [ + "SUCCESS", + "UNVALIDATED", + "INVALID_CONFIGURATION", + "PENDING", + "PENDING_CONSOLE_APPROVAL", + "AWAITING_QUORUM", + "UNHANDLED_ERROR" + ], + "description": "* SUCCESS - success\n* UNVALIDATED - not validated yet\n* INVALID_CONFIGURATION - at least one rule is invalid\n* PENDING - pending approval\n* PENDING_CONSOLE_APPROVAL - pending approval from the console app\n* AWAITING_QUORUM - pending quorum approval\n* UNHANDLED_ERROR - unhandled error\n" + }, + "rules": { + "type": "array", + "items": { + "type": "object", + "description": "Policy rule which is enforced on transactions", + "properties": { + "operator": { + "type": "string", + "description": "(deprecated - replaced by \"operators\") | Defines users who can initiate the type of transaction to which the rule applies. options are * \"*\" - All users are allowed * Specific User id", + "deprecated": true + }, + "operators": { + "type": "object", + "description": "Defines users/groups who can initiate the type of transaction to which the rule applies.", + "properties": { + "wildcard": { + "type": "string", + "enum": [ + "*" + ], + "description": "If used then this property should appear as the only child property\n* \"*\" - All users are allowed\n" + }, + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + }, + "services": { + "type": "array", + "description": "set of services to initiate transactions", + "items": { + "type": "string" + } + } + } + }, + "transactionType": { + "type": "string", + "enum": [ + "TRANSFER", + "CONTRACT_CALL", + "APPROVE", + "MINT", + "BURN", + "SUPPLY", + "REDEEM", + "STAKE", + "RAW", + "TYPED_MESSAGE" + ], + "description": "Defines the type of transaction to which the rule applies.\n * TRANSFER - Default. Transfers funds from one account to another\n * CONTRACT_CALL - Calls a smart contract, mainly for DeFi operations.\n * APPROVE - Allows a smart contract to withdraw from a designated wallet.\n * MINT - Perform a mint operation (increase supply) on a supported token\n * BURN - Perform a burn operation (reduce supply) on a supported token\n * SUPPLY - Use for DeFi to lend assets\n * REDEEM - Use for DeFi to get lending back\n * STAKE - Allows you to allocate and lock certain assets for earning staking rewards.\n * RAW - An off-chain message with no predefined format, use it to sign any message with your private key.\n * TYPED_MESSAGE - An off-chain message type that follows a predefined format, used to sign specific messages that are not actual transactions.\n" + }, + "designatedSigner": { + "type": "string", + "description": "(deprecated - replaced by \"designatedSigners\") Id representing the user who signs transactions that match a specific rule", + "deprecated": true + }, + "designatedSigners": { + "type": "object", + "description": "Set of ids representing the users who signs transactions that match a specific rule", + "properties": { + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "TRANSFER" + ], + "description": "Policy rule type" + }, + "action": { + "type": "string", + "enum": [ + "ALLOW", + "BLOCK", + "2-TIER" + ], + "description": "Defines what occurs when a transaction meets the rule's criteria\n* ALLOW - The transaction goes through and can be signed without requiring additional approvals\n* BLOCK - The transaction is automatically blocked\n* 2-TIER - Only these users or user groups can approve \n If any of them reject the transaction before the required approval threshold is met, the transaction doesn't go through\n The list of entities are set is \"authorizationGroups\" field\n" + }, + "asset": { + "type": "string", + "description": "Defines the type of asset being transacted, options are\n* \"*\" - All assets\n* Specific asset\n" + }, + "srcType": { + "description": "(deprecated - replaced by \"src\") source account type" + }, + "srcSubType": { + "description": "(deprecated - replaced by \"src\") source sub account type" + }, + "srcId": { + "description": "(deprecated - replaced by \"src\") source account id" + }, + "src": { + "type": "object", + "description": "Defines source accounts the rule allows transfers to originate from", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstType": { + "description": "(deprecated - replaced by \"dst\") destination account type" + }, + "dstSubType": { + "description": "(deprecated - replaced by \"dst\") destination sub account type" + }, + "dstId": { + "description": "(deprecated - replaced by \"dst\") destination account id" + }, + "dst": { + "type": "object", + "description": "Defines the destination accounts the rule allows transfers to", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "type": "string" + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstAddressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME", + "*" + ], + "description": "Defines whether the destination to which you are sending funds must be whitelisted, to allow one-time transfers to non-whitelisted external addresses, or both.\nBy default, you can only transfer to an external address after it’s whitelisted.\n * WHITELISTED - Can only be sent to whitelisted addresses.\n * ONE_TIME - Can only be sent to non-whitelisted external addresses.\n * \"*\" - can be sent to whitelisted addresses or non-whitelisted external\n" + }, + "amountCurrency": { + "type": "string", + "enum": [ + "USD", + "EUR", + "NATIVE" + ], + "description": "* USD - Limits the amount of any asset users can transfer based on the USD equivalent of the asset.\n* EUR - Limits the amount of any asset users can transfer based on the EURO equivalent of the asset.\n* NATIVE - Limits the amount of an asset a user can transfer when using a specific asset.\n" + }, + "amountScope": { + "type": "string", + "enum": [ + "SINGLE_TX", + "TIMEFRAME" + ], + "description": "* SINGLE_TX - limit applies to a single transaction\n* TIMEFRAME - limit applies to all transactions within the defined time period\n" + }, + "amount": { + "type": "number", + "description": "Defines the value a transaction must exceed for the rule to apply to it (according to the amountCurrency field)" + }, + "periodSec": { + "type": "number", + "description": "Time period in seconds applied by the amountScope field to accumulate transferred amounts in transactions that match the rule, until the total exceeds the value you specify under Minimum.\nWhen the specified amount is reached within that period, whether by one or many transactions, further transactions in that period either fail or require more approvals.\n" + }, + "authorizers": { + "type": "array", + "description": "(deprecated - replaced by \"authorizationGroups\") Allowed entities which can approves a transaction", + "deprecated": true, + "items": { + "type": "string" + } + }, + "authorizersCount": { + "type": "number", + "description": "(deprecated - replaced by \"authorizationGroups\") Min amount of entities which are needed to approve a transaction", + "deprecated": true + }, + "authorizationGroups": { + "type": "object", + "description": "Defines the transaction approval terms", + "properties": { + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ], + "description": "* AND - requires approval of all authorization groups\n* OR - requires approval of at least one of the authorization groups\n" + }, + "allowOperatorAsAuthorizer": { + "type": "boolean", + "description": "Defines whether the user who initiates a transaction can approve their own transaction and count toward the approval threshold for their transaction" + }, + "groups": { + "type": "array", + "description": "Groups of entities which can approve the transaction", + "items": { + "type": "object", + "properties": { + "users": { + "type": "array", + "description": "User ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Group ids", + "items": { + "type": "string" + } + }, + "th": { + "type": "number", + "description": "Represents the min amount of entities which are required to approve the transaction, default is 1." + } + } + } + } + } + }, + "amountAggregation": { + "type": "object", + "description": "Defines the method by which the Policy Engine calculates accumulation.\nIt uses the Initiator, Source, and Destination to calculate accumulation toward the value under Minimum, for the time under Time Period.\n", + "properties": { + "operators": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "srcTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "dstTransferPeers": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + } + } + }, + "rawMessageSigning": { + "type": "object", + "description": "Raw message signing configuration", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "object", + "properties": { + "path": { + "type": "array", + "items": { + "type": "number" + } + } + } + } + } + }, + "applyForApprove": { + "type": "boolean", + "description": "Applying this rule over APPROVE type transactions (can only be enabled when rule's transaction type is TRANSFER)" + }, + "applyForTypedMessage": { + "type": "boolean", + "description": "Applying this rule over TYPED_MESSAGE type transactions (can only be enabled when rule's transaction type is CONTRACT_CALL)" + }, + "externalDescriptor": { + "type": "string", + "description": "A unique id identifying the rule" + } + }, + "required": [ + "type", + "action", + "asset", + "amountCurrency", + "amountScope", + "amount", + "periodSec", + "externalDescriptor" + ] + } + }, + "checkResult": { + "type": "object", + "description": "Policy rules validation result", + "properties": { + "errors": { + "type": "number", + "description": "Number of errors" + }, + "result": { + "type": "array", + "description": "A set of validation results", + "items": { + "type": "object", + "description": "The rule validation result", + "properties": { + "index": { + "type": "number", + "description": "Rule index number in the policy" + }, + "status": { + "type": "string", + "enum": [ + "ok", + "failure" + ], + "description": "Validation status" + }, + "errors": { + "type": "array", + "description": "A set of rule validation error objects", + "items": { + "type": "object", + "description": "Rule validation result error", + "properties": { + "errorMessage": { + "type": "string", + "description": "Error message" + }, + "errorCode": { + "type": "number", + "description": "error code" + }, + "errorCodeName": { + "type": "string", + "description": "error code name" + }, + "errorField": { + "type": "string", + "enum": [ + "operator", + "operators", + "authorizationGroups", + "designatedSigner", + "designatedSigners", + "contractMethods", + "amountAggregation", + "src", + "dst" + ], + "description": "The field which the error relates to\n* operator - transaction initiator\n* operators - transaction initiators\n* authorizationGroups - transaction authorizer groups\n* designatedSigner - transaction signer\n* designatedSigners - transaction signers\n* contractMethods - contract methods\n* amountAggregation - transaction amount aggregation configuration\n* src - transaction source asset configuration\n* dst - transaction destination asset configuration\n" + } + }, + "required": [ + "errorMessage", + "errorCode", + "errorCodeName", + "errorField" + ] + } + } + }, + "required": [ + "index", + "status", + "errors" + ] + } + } + }, + "required": [ + "errors", + "result" + ] + }, + "metadata": { + "type": "object", + "description": "Policy related metadata", + "properties": { + "editedBy": { + "type": "string", + "description": "The user id of the user who last edited the policy" + }, + "editedAt": { + "type": "string", + "description": "The timestamp of the last edit of the policy" + }, + "publishedBy": { + "type": "string", + "description": "The user id of the user who last published the policy" + }, + "publishedAt": { + "type": "string", + "description": "The timestamp of the last publish of the policy" + } + } + } + }, + "required": [ + "status", + "rules", + "checkResult", + "metadata" + ] + }, + "description": "Send publish request for a set of policy rules.\n\nSend publish request of set of policy rules and returns the response.
\n**Note:** These endpoints are currently in beta and might be subject to changes.\nIf you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n" + } + ], + "errors": [ + { + "method": "post", + "path": "/off_exchange/settlements/trader", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/off_exchange/settlements/transactions", + "messages": [ + "Failed to escape $ref" + ] + } + ], + "options": { + "keyword": false, + "separate": null + } +} \ No newline at end of file diff --git a/examples/positional/iamport.json b/examples/positional/iamport.json new file mode 100644 index 0000000..7c6a63f --- /dev/null +++ b/examples/positional/iamport.json @@ -0,0 +1,6708 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "get", + "path": "/certifications/{imp_uid}", + "name": "certifications_getByImp_uid", + "parameters": [ + { + "type": "string", + "description": "대상 본인인증 정보의 " + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "imp_uid": { + "description": "아임포트가 발급해 준 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "서비스로부터의 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "name": { + "description": "본인인증대상자 성명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "gender": { + "description": "성별.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "birth": { + "description": "생년월일.\n\n리눅스 타임이 쓰인다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "birthday": { + "description": "생년월일, YYYYMMDD 형식.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "foreigner": { + "type": "boolean", + "description": "외국인 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "phone": { + "description": "본인인증 대상자 핸드폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "carrier": { + "type": "string", + "enum": [ + "SKT", + "KT", + "LGT" + ], + "description": "본인인증 대상자 통신사 코드.", + "x-typia-required": true, + "x-typia-optional": false + }, + "certified": { + "type": "boolean", + "description": "OTP 인증 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "certified_at": { + "description": "OTP 인증 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "unique_key": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "unique_in_site": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "description": "PG 제공자.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "origin": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "__otp": { + "description": "(테스트 전용) OTP 코드.\n\n오직 `fake-iamport-server` 에서만 쓰이는 속성으로써, 본인인증을 시뮬레이션할 때,\n어떠한 OTP 코드가 발급되었는 지를 확인하기 위하여 사용된다. 이를 이용하여\n{@link functional.certifications.otp.confirm } 함수를 호출하면, 본인인증을 완료할\n수 있다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "required": [ + "imp_uid", + "merchant_uid", + "name", + "gender", + "birth", + "birthday", + "foreigner", + "phone", + "carrier", + "certified", + "certified_at", + "unique_key", + "unique_in_site", + "pg_tid", + "pg_provider", + "origin" + ], + "description": "본인 인증 내역.\n\n`IIamportCertification` 은 아임포트의 본인인증 정보를 형상화한 자료구조 인터페이스이다.\n\n단, `IIamportCertification` 레코드의 존재가 곧 본인인증의 완결을 뜻하는 것은 아니다.\n{@link IIamportCertification.certified } 값이 `true` 여야만이 비로소, 본인인증\n대상자가 자신의 핸드폰 번호로 전송된 OTP 를 아임포트의 본인인증 팝업창에 정확히 적어,\n본인인증을 완료했음을 의미한다.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "본인인증 정보 열람하기.\n\n`certiciations.at` 은 본인인증 정보를 열람할 때 사용하는 API 함수이다.\n\n다만 이 API 함수를 통하여 열람한 본인인증 정보 {@link IIamportCertification } 이\n곧 OTP 인증까지 마쳐 본인인증을 모두 마친 레코드라는 보장은 없다. 본인인증의 완결\n여부는 오직, {@link IIamportCertification.certified } 값을 직접 검사해봐야만 알\n수 있기 때문이다." + }, + { + "method": "delete", + "path": "/certifications/{imp_uid}", + "name": "certifications_eraseByImp_uid", + "parameters": [ + { + "type": "string", + "description": "대상 본인인증 정보의 " + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "imp_uid": { + "description": "아임포트가 발급해 준 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "서비스로부터의 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "name": { + "description": "본인인증대상자 성명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "gender": { + "description": "성별.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "birth": { + "description": "생년월일.\n\n리눅스 타임이 쓰인다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "birthday": { + "description": "생년월일, YYYYMMDD 형식.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "foreigner": { + "type": "boolean", + "description": "외국인 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "phone": { + "description": "본인인증 대상자 핸드폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "carrier": { + "type": "string", + "enum": [ + "SKT", + "KT", + "LGT" + ], + "description": "본인인증 대상자 통신사 코드.", + "x-typia-required": true, + "x-typia-optional": false + }, + "certified": { + "type": "boolean", + "description": "OTP 인증 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "certified_at": { + "description": "OTP 인증 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "unique_key": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "unique_in_site": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "description": "PG 제공자.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "origin": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "__otp": { + "description": "(테스트 전용) OTP 코드.\n\n오직 `fake-iamport-server` 에서만 쓰이는 속성으로써, 본인인증을 시뮬레이션할 때,\n어떠한 OTP 코드가 발급되었는 지를 확인하기 위하여 사용된다. 이를 이용하여\n{@link functional.certifications.otp.confirm } 함수를 호출하면, 본인인증을 완료할\n수 있다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "required": [ + "imp_uid", + "merchant_uid", + "name", + "gender", + "birth", + "birthday", + "foreigner", + "phone", + "carrier", + "certified", + "certified_at", + "unique_key", + "unique_in_site", + "pg_tid", + "pg_provider", + "origin" + ], + "description": "본인 인증 내역.\n\n`IIamportCertification` 은 아임포트의 본인인증 정보를 형상화한 자료구조 인터페이스이다.\n\n단, `IIamportCertification` 레코드의 존재가 곧 본인인증의 완결을 뜻하는 것은 아니다.\n{@link IIamportCertification.certified } 값이 `true` 여야만이 비로소, 본인인증\n대상자가 자신의 핸드폰 번호로 전송된 OTP 를 아임포트의 본인인증 팝업창에 정확히 적어,\n본인인증을 완료했음을 의미한다.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "본인인증 정보 삭제하기." + }, + { + "method": "post", + "path": "/certifications/otp/request", + "name": "certifications_otp_request_post", + "parameters": [ + { + "type": "object", + "properties": { + "name": { + "description": "본인인증대상자 성명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "phone": { + "description": "본인인증 대상자 핸드폰 번호.\n\n핸드폰 번호에 \"-\" 값이 들어가던 아니던 상관 없음.\n\n다만, 내부적으로는 \"-\" 값을 제거하여 처리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "birth": { + "description": "생년월일.\n\nYYYYMMDD 형식.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "gender_digit": { + "description": "주민등록 뒷부분 첫 자리.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "carrier": { + "type": "string", + "enum": [ + "SKT", + "KT", + "LGT" + ], + "description": "본인인증 대상자 통신사 코드.", + "x-typia-required": true, + "x-typia-optional": false + }, + "is_mvno": { + "type": "boolean", + "description": "알뜰폰 여부.", + "x-typia-required": false, + "x-typia-optional": true + }, + "commpany": { + "description": "가맹점 서비스 명칭 또는 domain URL.\n\nKISA 에서 대상자에게 발송하는 SMS에 안내될 서비스 명칭.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "merchant_uid": { + "description": "귀사 서비스에서의 본인인증 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "pg": { + "description": "PG 사 구분자.\n\n다날 상점아이디를 2개 이상 동시에 사용하시려는 경우에 설정하면 된다.\n\n**danal.{상점아이디}** 형태로 지정.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "required": [ + "name", + "phone", + "birth", + "gender_digit", + "carrier" + ], + "description": "본인 인증 입력 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "imp_uid": { + "description": "본인인증정보의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "imp_uid" + ], + "description": "본인인증 정보의 접근자 구조체.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "본인인증 요청하기.\n\n`certifications.otp.request` 는 아임포트 서버에 본인인증을 요청하는 API 함수이다.\n이 API 를 호출하면 본인인증 대상자의 핸드폰으로 OTP 문자가 전송되며, 본인인증\n대상자가 {@link certifications.otp.confirm } 을 통하여 이 OTP 번호를 정확히\n입력함으로써, 본인인증이 완결된다.\n\n또한 본인인증 대상자가 자신의 핸드폰으로 전송된 OTP 문자를 입력하기 전에도,\n여전히해당 본인인증 내역은 {@link certifications.at } 함수를 통하여 조회할 수 있다.\n다만, 이 때 리턴되는 {@link IIamportCertification } 에서 인증의 완결 여부를\n지칭하는 {@link IIamportCertification.certified } 값은 `false` 이다." + }, + { + "method": "post", + "path": "/certifications/otp/confirm/{imp_uid}", + "name": "certifications_otp_confirm_postByImp_uid", + "parameters": [ + { + "type": "string", + "description": "대상 본인인증 정보의 " + }, + { + "type": "object", + "properties": { + "otp": { + "description": "SMS 로 전송된 본인인증 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "otp" + ], + "description": "본인인증 승인을 위한 입력 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "imp_uid": { + "description": "아임포트가 발급해 준 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "서비스로부터의 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "name": { + "description": "본인인증대상자 성명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "gender": { + "description": "성별.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "birth": { + "description": "생년월일.\n\n리눅스 타임이 쓰인다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "birthday": { + "description": "생년월일, YYYYMMDD 형식.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "foreigner": { + "type": "boolean", + "description": "외국인 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "phone": { + "description": "본인인증 대상자 핸드폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "carrier": { + "type": "string", + "enum": [ + "SKT", + "KT", + "LGT" + ], + "description": "본인인증 대상자 통신사 코드.", + "x-typia-required": true, + "x-typia-optional": false + }, + "certified": { + "type": "boolean", + "description": "OTP 인증 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "certified_at": { + "description": "OTP 인증 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "unique_key": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "unique_in_site": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "description": "PG 제공자.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "origin": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "__otp": { + "description": "(테스트 전용) OTP 코드.\n\n오직 `fake-iamport-server` 에서만 쓰이는 속성으로써, 본인인증을 시뮬레이션할 때,\n어떠한 OTP 코드가 발급되었는 지를 확인하기 위하여 사용된다. 이를 이용하여\n{@link functional.certifications.otp.confirm } 함수를 호출하면, 본인인증을 완료할\n수 있다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "required": [ + "imp_uid", + "merchant_uid", + "name", + "gender", + "birth", + "birthday", + "foreigner", + "phone", + "carrier", + "certified", + "certified_at", + "unique_key", + "unique_in_site", + "pg_tid", + "pg_provider", + "origin" + ], + "description": "본인 인증 내역.\n\n`IIamportCertification` 은 아임포트의 본인인증 정보를 형상화한 자료구조 인터페이스이다.\n\n단, `IIamportCertification` 레코드의 존재가 곧 본인인증의 완결을 뜻하는 것은 아니다.\n{@link IIamportCertification.certified } 값이 `true` 여야만이 비로소, 본인인증\n대상자가 자신의 핸드폰 번호로 전송된 OTP 를 아임포트의 본인인증 팝업창에 정확히 적어,\n본인인증을 완료했음을 의미한다.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "본인인증 시 발급된 OTP 코드 입력하기.\n\n`certifications.otp.confirm` 는 {@link certifications.otp.request } 를 통하여\n발급된 본인인증 건에 대하여, 본인인증 대상자의 휴대폰으로 전송된 OTP 번호를\n검증하고, 입력한 OTP 번호가 맞거든 해당 본인인증 건을 승인하여 완료 처리해주는\nAPI 함수이다.\n\n이처럼 본인인증을 완료하거든, 해당 본인인증 건 {@link IIamportCertification } 의\n{@link IIamportCertification.certified } 값이 비로소 `true` 로 변경되어,\n비로소 완결된다." + }, + { + "method": "post", + "path": "/internal/webhook", + "name": "internal_webhook_post", + "parameters": [ + { + "type": "object", + "properties": { + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ], + "description": "현재 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "imp_uid", + "merchant_uid", + "status" + ], + "description": "웹훅 데이터.", + "x-typia-jsDocTags": [] + } + ], + "description": "웹훅 이벤트 더미 리스너.\n\n`internal.webhook` 은 실제 아임포트의 서버에는 존재하지 않는 API 로써,\n`fake-impoart-server` 의 {@link Configuration.WEBHOOK_URL } 에 아무런 URL 을 설정하지\n않으면, `fake-iamport-server` 로부터 발생하는 모든 종류의 웹훅 이벤트는 이 곳으로 전달되어\n무의미하게 사라진다.\n\n따라서 `fake-iamport-server` 를 사용하여 아임포트 서버와의 연동을 미리 검증코자 할 때는,\n반드시 {@link Configuration.WEBHOOK_URL } 를 설정하여 웹훅 이벤트가 귀하의 백엔드 서버로\n제대로 전달되도록 하자." + }, + { + "method": "get", + "path": "/internal/deposit/{imp_uid}", + "name": "internal_deposit_getByImp_uid", + "parameters": [ + { + "type": "string", + "description": "대상 결제의 " + } + ], + "description": "가상 계좌에 입금하기.\n\n`internal.deposit` 은 실제 아임포트 결제 서버에는 존재하지 않는 API 로써, 가상 계좌\n결제를 신청한 고객이, 이후 가상 계좌에 목표 금액을 입금하는 상황을 시뮬레이션 할 수 있는\n함수이다.\n\n즉, `internal.deposit` 는 고객이 스스로에게 가상으로 발급된 계좌에 입금을 하고, 그에 따라\n아임포트 서버에서 webhook 이벤트가 발생, 이를 귀하의 백엔드 서버로 전송하는 일련의 상황을\n시뮬레이션하기 위하여 설계된 테스트 함수다." + }, + { + "method": "get", + "path": "/payments/{imp_uid}", + "name": "payments_getByImp_uid", + "parameters": [ + { + "type": "string", + "description": "대상 결제 기록의 " + }, + { + "type": "object", + "properties": { + "extension": { + "type": "boolean", + "description": "페이팔의 경우, 이 값을 `true` 로 할 것.", + "x-typia-required": false, + "x-typia-optional": true + } + }, + "description": "결제 수단이 페이팔인 경우, 페이팔의 구매자 보호정책에 의해 결제 승인 시점에\nPending 상태를 만든 후, 내부 심사등을 통해 최종 결제 완료라고 변경함.\n\n`iamport` 의 기술적 이슈로 해당 상태를 status: failed 로 기록함. 추후\n페이팔에서 최종결제완료로 변경된 경우, `iamport` 에서 `paid` 로 변경 후,\n해당건에 대한 웹훅 발송. `iamport` 를 사용하는 고객사에서는, failed 로 이미\n처리된 결제건에 대한 paid 상태의 웹훅을 받는 문제점이 생김.\n\n이에, `iamport` 에서 제공하는 `/payment/{imp_uid}` 에 query-string 으로\n`extension=true` 옵션을 추가해야 함", + "x-typia-jsDocTags": [ + { + "name": "issue", + "text": [ + { + "text": "https://github.com/samchon/fake-iamport-server/issues/13", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Sangjin Han - https://github.com/ltnscp9028", + "kind": "text" + } + ] + } + ] + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "oneOf": [ + { + "type": "object", + "properties": { + "card_code": { + "description": "카드 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "description": "카드 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}" + }, + "card_quota": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "integer" + }, + "apply_num": { + "description": "카드사 승인번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pay_method": { + "type": "string", + "enum": [ + "card", + "samsung" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "card_code", + "card_name", + "card_number", + "card_quota", + "apply_num", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "bank_code": { + "description": "은행 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "bank_name": { + "description": "은행 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pay_method": { + "type": "string", + "enum": [ + "trans" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "bank_code", + "bank_name", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "vbank_code": { + "description": "가상 계좌 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_name": { + "description": "가상 게좌 이름", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_num": { + "description": "가상 계좌 번호", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_holder": { + "description": "가상 계좌 예금주.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_date": { + "description": "가상 계좌 입금 만료 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vbank_issued_at": { + "description": "가상 계좌 개설 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "pay_method": { + "type": "string", + "enum": [ + "vbank" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "vbank_code", + "vbank_name", + "vbank_num", + "vbank_holder", + "vbank_date", + "vbank_issued_at", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "pay_method": { + "type": "string", + "enum": [ + "phone", + "kpay", + "kakaopay", + "payco", + "lpay", + "ssgpay", + "tosspay", + "cultureland", + "smartculture", + "happymoney", + "booknlife", + "point" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "결제 기본 (공통) 정보.", + "x-typia-jsDocTags": [] + } + ], + "description": "결제 정보.\n\n`IIamportPayment` 는 아임포트의 결제 정보를 형상화한 자료구조이자 유니언 타입의\n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.pay_method === \"card\")\n payment.card_number; // payment be IIamportCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "결제 기록 열람하기.\n\n아임포트를 통하여 발생한 결제 기록을 열람한다." + }, + { + "method": "post", + "path": "/payments/cancel", + "name": "payments_cancel_post", + "parameters": [ + { + "type": "object", + "properties": { + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "취소 금액, 부분 취소도 가능하다.\n\n누락시 전액 취소.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "checksum": { + "description": "취소 트랜잭션 수행 전, 현재 시점의 취소 가능한 잔액.\n\nAPI요청자가 기록하고 있는 취소가능 잔액과 아임포트가 기록하고 있는 취소가능 잔액이\n일치하는지 사전에 검증하고, 검증에 실패하면 트랜잭션을 수행하지 않는다.\n\n`null` 인 경우에는 검증 프로세스를 생략.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number", + "nullable": true + }, + "reason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "tax_free": { + "description": "취소요청금액 중 면세금액.", + "x-typia-jsDocTags": [ + { + "name": "default", + "text": [ + { + "text": "0", + "kind": "text" + } + ] + } + ], + "x-typia-required": false, + "x-typia-optional": true, + "type": "number", + "default": 0 + }, + "refund_holder": { + "description": "환불계좌 예금주.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "refund_bank": { + "description": "환불계좌 은행 코드.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "refund_account": { + "description": "환불계좌 계좌번호.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "refund_tel": { + "description": "환불계좌 예금주 연락처", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "required": [ + "imp_uid", + "merchant_uid", + "checksum", + "reason" + ], + "description": "결제 취소 입력 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "oneOf": [ + { + "type": "object", + "properties": { + "card_code": { + "description": "카드 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "description": "카드 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}" + }, + "card_quota": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "integer" + }, + "apply_num": { + "description": "카드사 승인번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pay_method": { + "type": "string", + "enum": [ + "card", + "samsung" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "card_code", + "card_name", + "card_number", + "card_quota", + "apply_num", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "bank_code": { + "description": "은행 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "bank_name": { + "description": "은행 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pay_method": { + "type": "string", + "enum": [ + "trans" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "bank_code", + "bank_name", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "vbank_code": { + "description": "가상 계좌 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_name": { + "description": "가상 게좌 이름", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_num": { + "description": "가상 계좌 번호", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_holder": { + "description": "가상 계좌 예금주.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_date": { + "description": "가상 계좌 입금 만료 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vbank_issued_at": { + "description": "가상 계좌 개설 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "pay_method": { + "type": "string", + "enum": [ + "vbank" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "vbank_code", + "vbank_name", + "vbank_num", + "vbank_holder", + "vbank_date", + "vbank_issued_at", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "pay_method": { + "type": "string", + "enum": [ + "phone", + "kpay", + "kakaopay", + "payco", + "lpay", + "ssgpay", + "tosspay", + "cultureland", + "smartculture", + "happymoney", + "booknlife", + "point" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "결제 기본 (공통) 정보.", + "x-typia-jsDocTags": [] + } + ], + "description": "결제 정보.\n\n`IIamportPayment` 는 아임포트의 결제 정보를 형상화한 자료구조이자 유니언 타입의\n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.pay_method === \"card\")\n payment.card_number; // payment be IIamportCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "결제 취소하기.\n\n만약 가상 계좌를 통한 결제였다면, 반드시 환불 계좌 정보를 입력해줘야 한다." + }, + { + "method": "get", + "path": "/receipts/{imp_uid}", + "name": "receipts_getByImp_uid", + "parameters": [ + { + "type": "string", + "description": "귀속 결제의 " + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "imp_uid": { + "description": "귀속 결제의 {@link IIamportPayment.imp_uid }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_uid": { + "description": "현금 영수증의 고유 식별자 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "apply_num": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "person", + "company" + ], + "description": "현금영수증 발행 타입 (대상)." + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "receipt_url": { + "description": "현금영수증 조회 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "applied_at": { + "description": "현금영수증 발행 시간.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "현금영수증 취소 시간.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "required": [ + "imp_uid", + "receipt_uid", + "apply_num", + "type", + "amount", + "vat", + "receipt_url", + "applied_at", + "cancelled_at" + ], + "description": "현금 영수증 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "현금 영수증 조회하기." + }, + { + "method": "post", + "path": "/receipts/{imp_uid}", + "name": "receipts_postByImp_uid", + "parameters": [ + { + "type": "string", + "description": "귀속 결제의 " + }, + { + "type": "object", + "properties": { + "imp_uid": { + "description": "귀속 결제의 {@link IIamportPayment.imp_uid }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "identifier": { + "description": "현금영수증 발생대상 식별정보.\n\n - 국세청현금영수증카드\n - 휴대폰번호\n - 주민등록번호\n - 사업자등록번호", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "identifier_type": { + "type": "string", + "enum": [ + "phone", + "person", + "business", + "taxcard" + ], + "description": "현금영수증 발행대상 유형.\n\n - person: 주민등록번호\n - business: 사업자등록번호\n - phone: 휴대폰번호\n - taxcard: 국세청현금영수증카드\n\n일부 PG 사의 경우 이 항목이 없어 된다는데, 어지간하면 그냥 쓰기 바람.", + "x-typia-required": false, + "x-typia-optional": true + }, + "type": { + "type": "string", + "enum": [ + "person", + "company" + ], + "description": "현금영수증 발행 타입 (대상).\n\n누락시 person 이 사용됨.", + "x-typia-required": false, + "x-typia-optional": true + }, + "buyer_name": { + "description": "구매자 이름.\n\n형금영수증 발행건 사후 추적을 위해 가급 입력하기 바람.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_email": { + "description": "구매자 이메일.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_tel": { + "description": "구매자 전화번호.\n\n현금영수증 발행건 사후 추적을 위해 가급 입력하기 바람.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "tax_free": { + "description": "면세 금액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + } + }, + "required": [ + "imp_uid", + "identifier" + ], + "description": "현금영수증 입력 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "imp_uid": { + "description": "귀속 결제의 {@link IIamportPayment.imp_uid }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_uid": { + "description": "현금 영수증의 고유 식별자 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "apply_num": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "person", + "company" + ], + "description": "현금영수증 발행 타입 (대상)." + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "receipt_url": { + "description": "현금영수증 조회 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "applied_at": { + "description": "현금영수증 발행 시간.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "현금영수증 취소 시간.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "required": [ + "imp_uid", + "receipt_uid", + "apply_num", + "type", + "amount", + "vat", + "receipt_url", + "applied_at", + "cancelled_at" + ], + "description": "현금 영수증 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "현금 영수증 발행하기." + }, + { + "method": "delete", + "path": "/receipts/{imp_uid}", + "name": "receipts_eraseByImp_uid", + "parameters": [ + { + "type": "string", + "description": "귀속 결제의 " + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "imp_uid": { + "description": "귀속 결제의 {@link IIamportPayment.imp_uid }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_uid": { + "description": "현금 영수증의 고유 식별자 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "apply_num": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "person", + "company" + ], + "description": "현금영수증 발행 타입 (대상)." + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "receipt_url": { + "description": "현금영수증 조회 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "applied_at": { + "description": "현금영수증 발행 시간.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "현금영수증 취소 시간.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "required": [ + "imp_uid", + "receipt_uid", + "apply_num", + "type", + "amount", + "vat", + "receipt_url", + "applied_at", + "cancelled_at" + ], + "description": "현금 영수증 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "현금 영수증 취소하기." + }, + { + "method": "post", + "path": "/users/getToken", + "name": "users_getToken_post", + "parameters": [ + { + "type": "object", + "properties": { + "imp_key": { + "description": "API 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "imp_secret": { + "description": "Secret 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "imp_key", + "imp_secret" + ], + "description": "아임포트에서 부여해 준 API 및 secret 키.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "now": { + "description": "토큰 발행 시간.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "expired_at": { + "description": "토큰 만료 시간.\n\n리눅스 타임이 기준이며, 이를 JS 에서 사용하려거든, 아래와 같이 변환해야 한다.\n\n```typescript\nnew Date(user.expired_at * 1_000);\n```", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "access_token": { + "description": "유저 인증 토큰.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "now", + "expired_at", + "access_token" + ], + "description": "아임포트 유저 인증 정보.\n\n아임포트는 고객사에게 API 및 secret 키 정보, {@link IIamportUser.IAccessor } 를 발급해준다.\n\n하지만 이를 곧장 아임포트의 유저 인증에 사용할 수는 없고, 해당 API 및 secret 키를 토대로 유저\n인증 토큰을 발급받아야 하는데, 이 유저 인증 토큰에는 하필이면 만로 시간이라는 게 존재한다.\n`IIamportUser` 는 바로 이러한 유저 인증 토큰 및 그것의 만료 시간을 형상화한 자료구조\n인터페이스이다.\n\n더하여 이처럼 만료 시간이 존재하는 아임포트의 유저 인증 토큰의 특성상, 이것의 만료 시간이\n초과되지 않도록 관리하는 것은 매우 힘든 일이다. 이에 `iamport-server-api` 에서는 아임포트\n유저 인증 토큰이 만료될 때마다 자동 갱신해주는, {@link IamportConnector } 클래스를 제공한다.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "유저 인증 토큰 발행하기.\n\n아임포트에 가입하여 부여받은 API 및 secret 키를 토대로, 유저 인증 토큰을 발행한다.\n\n단, 아임포트가 발급해주는 유저 인증 토큰에는 유효 시간 {@link IIamportUser.expired_at }\n이 있어, 해당 시간이 지나거든 기 발급 토큰이 만료되어 더 이상 쓸 수 없게 된다. 때문에\n아임포트의 이러한 시간 제한에 구애받지 않고 자유로이 아임포트의 API 를 이용하고 싶다면,\n`iamport-server-api` 에서 제공해주는 {@link IamportConnector } 를 활용하도록 하자." + }, + { + "method": "post", + "path": "/vbanks", + "name": "vbanks_post", + "parameters": [ + { + "type": "object", + "properties": { + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vbank_code": { + "description": "가상계좌 은행 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_due": { + "description": "가상계좌 입금기한, 유닉스 타임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vbank_holder": { + "description": "예금주.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_email": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_tel": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_addr": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_postcode": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "pg": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "notice_url": { + "description": "가상 계좌 입금 정보를 수신할 URL.\n\n누락시 기본 웹훅 URL 사용.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "custom_data": { + "description": "커스텀 데이터, 자유롭게 사용 가능.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "pg_api_key": { + "description": "[이니시스 전용] 가맹점 콘솔에서 확인한 API 값.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "required": [ + "merchant_uid", + "amount", + "vbank_code", + "vbank_due", + "vbank_holder" + ], + "description": "가상 계좌 결제 입력 정보.\n\n가상 계좌를 임의 생성할 수 있다.\n\n단, 일부 PG 사 혹은 `fake-iamport-server` 만 가능.\n\n - 세틀뱅크\n - 나이스페이먼츠\n - KG이니시스", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "vbank_code": { + "description": "가상 계좌 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_name": { + "description": "가상 게좌 이름", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_num": { + "description": "가상 계좌 번호", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_holder": { + "description": "가상 계좌 예금주.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_date": { + "description": "가상 계좌 입금 만료 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vbank_issued_at": { + "description": "가상 계좌 개설 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "pay_method": { + "type": "string", + "enum": [ + "vbank" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "vbank_code", + "vbank_name", + "vbank_num", + "vbank_holder", + "vbank_date", + "vbank_issued_at", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "가상 계좌 발급하기." + }, + { + "method": "put", + "path": "/vbanks", + "name": "vbanks_put", + "parameters": [ + { + "type": "object", + "properties": { + "imp_uid": { + "description": "대상 결제 기록의 {@link IIamportPayment.imp_uid }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "수정할 결제 금액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "vbank_due": { + "description": "수정할 가상계좌 입금 기한.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + } + }, + "required": [ + "imp_uid" + ], + "description": "가상 계좌 결제의 수정 입력 정보.\n\n아직 입금되지 않은 가상계좌의 입금기한 또는 입금금액을 수정할 수 있다.\n\n다만, 세틀뱅크 혹은 `fake-iamport-server` 만 가능.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "vbank_code": { + "description": "가상 계좌 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_name": { + "description": "가상 게좌 이름", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_num": { + "description": "가상 계좌 번호", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_holder": { + "description": "가상 계좌 예금주.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_date": { + "description": "가상 계좌 입금 만료 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vbank_issued_at": { + "description": "가상 계좌 개설 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "pay_method": { + "type": "string", + "enum": [ + "vbank" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "vbank_code", + "vbank_name", + "vbank_num", + "vbank_holder", + "vbank_date", + "vbank_issued_at", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "가상 계좌 편집하기." + }, + { + "method": "get", + "path": "/subscribe/customers/{customer_uid}", + "name": "subscribe_customers_getByCustomer_uid", + "parameters": [ + { + "type": "string", + "description": "고객 (간편 결제 카드) 식별자 키" + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_code": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_type": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "inserted": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "updated": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "pg_provider", + "pg_id", + "card_name", + "card_code", + "card_number", + "card_type", + "customer_name", + "customer_tel", + "customer_email", + "customer_addr", + "customer_postcode", + "inserted", + "updated", + "customer_uid" + ], + "description": "간편 결제 카드 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "간편 결제 카드 정보 조회하기.\n\n`subscribe.customers.at` 은 고객이 {@link store } 나 혹은 아임포트가 제공하는\n간편 결제 카드 등록 창을 이용하여 저장한 간편 결제 카드 정보를 조회하는 API\n함수이다." + }, + { + "method": "post", + "path": "/subscribe/customers/{customer_uid}", + "name": "subscribe_customers_postByCustomer_uid", + "parameters": [ + { + "type": "string", + "description": "고객 (간편 결제 카드) 식별자 키" + }, + { + "type": "object", + "properties": { + "card_number": { + "description": "카드 번호.\n\n형식: XXXX-XXXX-XXXX-XXXX", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}" + }, + "expiry": { + "description": "카드 유효기간.\n\n형식: YYYY-MM", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})-(0[1-9]|1[012])$" + }, + "birth": { + "description": "생년월일 YYMMDD 또는 사업자등록번호 10자리.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$" + }, + "pwd_2digit": { + "description": "카드 비밀번호 앞 두 자리.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "pattern": "\\d{2}" + }, + "cvc": { + "description": "카드 인증번호 (카드 뒷면 3 자리).", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "pattern": "\\d{2}" + }, + "customer_name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_tel": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_email": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "customr_addr": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_postcode": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "card_number", + "expiry", + "birth", + "customer_uid" + ], + "description": "간편 결제 카드 입력 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_code": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_type": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "inserted": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "updated": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "pg_provider", + "pg_id", + "card_name", + "card_code", + "card_number", + "card_type", + "customer_name", + "customer_tel", + "customer_email", + "customer_addr", + "customer_postcode", + "inserted", + "updated", + "customer_uid" + ], + "description": "간편 결제 카드 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "간편 결제 카드 등록하기.\n\n`subscribe.customers.stoer` 는 고객이 자신의 카드를 서버에 등록해두고, 매번 결제가\n필요할 때마다 카드 정보를 반복 입력하는 일 없이, 간편하게 결제를 진행하고자 할 때\n사용하는 API 함수이다.\n\n참고로 `subscribe.customers.store` 는 클라이언트 어플리케이션이 아임포트가 제공하는\n간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는\n일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는 상황을 시뮬레이션하기 위하여,\n테스트 자동화 프로그램 수준에서 사용될 수는 있다." + }, + { + "method": "delete", + "path": "/subscribe/customers/{customer_uid}", + "name": "subscribe_customers_eraseByCustomer_uid", + "parameters": [ + { + "type": "string", + "description": "고객 (간편 결제 카드) 식별자 키" + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_code": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_type": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "inserted": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "updated": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "pg_provider", + "pg_id", + "card_name", + "card_code", + "card_number", + "card_type", + "customer_name", + "customer_tel", + "customer_email", + "customer_addr", + "customer_postcode", + "inserted", + "updated", + "customer_uid" + ], + "description": "간편 결제 카드 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "간편 결제 카드 삭제하기.\n\n간편 결제를 위하여 등록한 카드를 제거한다." + }, + { + "method": "post", + "path": "/subscribe/payments/onetime", + "name": "subscribe_payments_onetime_post", + "parameters": [ + { + "type": "object", + "properties": { + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.\n\n이를 생략시 단순 결제로만 그치며, 카드 정보가 간편 결제용으로 등록되지 아니함.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "card_number": { + "description": "카드 번호.\n\n형식: XXXX-XXXX-XXXX-XXXX", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}" + }, + "expiry": { + "description": "카드 유효기간.\n\n형식: YYYY-MM", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})-(0[1-9]|1[012])$" + }, + "birth": { + "description": "생년월일 YYMMDD 또는 사업자등록번호 10자리.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$" + }, + "pwd_2digit": { + "description": "카드 비밀번호 앞 두 자리.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "pattern": "\\d{2}" + }, + "cvc": { + "description": "카드 인증번호 (카드 뒷면 3 자리).", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "pattern": "\\d{2}" + }, + "customer_name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_tel": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_email": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "customr_addr": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_postcode": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트가 아닌 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "name": { + "description": "주문 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ], + "description": "통화 정보.", + "x-typia-required": false, + "x-typia-optional": true + }, + "tax_free": { + "description": "면세 공급가액.\n\n기본값은 0 로써, 알아서 amount 의 1/11 로써 부가세 처리됨.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "card_quota": { + "description": "할부 개월 수.\n\n일시불은 0.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "buyer_name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_email": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "buyer_tel": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_addr": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_postcode": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "interest_free_by_merchant": { + "type": "boolean", + "description": "카드할부처리할 때, 할부이자가 발생하는 경우 (카드사 무이자 프로모션 제외).\n\n부과되는 할부이자를 고객대신 가맹점이 지불하고자 PG사와 계약된 경우(현재, 나이스페이먼츠만 지원됨)", + "x-typia-required": false, + "x-typia-optional": true + }, + "use_card_point": { + "type": "boolean", + "description": "승인요청시 카드사 포인트 차감하며 결제승인처리할지 flag.\n\nPG사 영업담당자와 계약 당시 사전 협의 필요(현재, 나이스페이먼츠만 지원됨)", + "x-typia-required": false, + "x-typia-optional": true + }, + "custom_data": { + "description": "임의 정보를 기재할 수 있다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "notice_url": { + "description": "결제 성공시 통지될 Notification, 웹훅 URL.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "url" + } + }, + "required": [ + "card_number", + "expiry", + "birth", + "merchant_uid", + "amount", + "name" + ], + "description": "결제 신청 입력 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "card_code": { + "description": "카드 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "description": "카드 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}" + }, + "card_quota": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "integer" + }, + "apply_num": { + "description": "카드사 승인번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pay_method": { + "type": "string", + "enum": [ + "card", + "samsung" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "card_code", + "card_name", + "card_number", + "card_quota", + "apply_num", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "카드로 결제하기, 더불어 간편 결제용으로 등록 가능.\n\n`subscribe.payments.onetime` 은 카드를 매개로 한 결제를 하고자 할 때 호출하는 API\n함수이다. 더하여 입력 값에 {@link IIamportSubscription.IOnetime.customer_uid } 를\n기입하는 경우, 결제에 사용한 카드를 그대로 간편 결제용 카드\n{@link IIamportSubscription } 로 등록해버린다.\n\n다만, 정히 간편 카드 등록과 결제를 동시에 하고 싶다면,\n`subscribe.payments.onetime` 에 {@link IIamportSubscription.IOnetime.customer_uid }\n를 더하기보다, {@link subscribe.customers.store } 와 {@link subscribe.payments.again }\n을 각각 호출하는 것을 권장한다. 그것이 예외적인 상황에 보다 안전하게 대처할 수 있기\n때문이다.\n\n더하여 `subscribe.payments.onetime` 은 클라이언트 어플리케이션이 아임포트가 제공하는\n결제 창을 그대로 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는 일은\n없을 것이다. 다만, 고객이 카드를 통하여 결제하는 상황을 시뮬레이션하기 위하여, 테스트\n자동화 프로그램 수준에서 사용될 수는 있다." + }, + { + "method": "post", + "path": "/subscribe/payments/again", + "name": "subscribe_payments_again_post", + "parameters": [ + { + "type": "object", + "properties": { + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트가 아닌 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "name": { + "description": "주문 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ], + "description": "통화 정보.", + "x-typia-required": false, + "x-typia-optional": true + }, + "tax_free": { + "description": "면세 공급가액.\n\n기본값은 0 로써, 알아서 amount 의 1/11 로써 부가세 처리됨.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "card_quota": { + "description": "할부 개월 수.\n\n일시불은 0.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "buyer_name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_email": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "buyer_tel": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_addr": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_postcode": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "interest_free_by_merchant": { + "type": "boolean", + "description": "카드할부처리할 때, 할부이자가 발생하는 경우 (카드사 무이자 프로모션 제외).\n\n부과되는 할부이자를 고객대신 가맹점이 지불하고자 PG사와 계약된 경우(현재, 나이스페이먼츠만 지원됨)", + "x-typia-required": false, + "x-typia-optional": true + }, + "use_card_point": { + "type": "boolean", + "description": "승인요청시 카드사 포인트 차감하며 결제승인처리할지 flag.\n\nPG사 영업담당자와 계약 당시 사전 협의 필요(현재, 나이스페이먼츠만 지원됨)", + "x-typia-required": false, + "x-typia-optional": true + }, + "custom_data": { + "description": "임의 정보를 기재할 수 있다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "notice_url": { + "description": "결제 성공시 통지될 Notification, 웹훅 URL.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "url" + }, + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "merchant_uid", + "amount", + "name", + "customer_uid" + ], + "description": "간편 결제 카드로 결제 신청 입력 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "type": "object", + "properties": { + "card_code": { + "description": "카드 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "description": "카드 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}" + }, + "card_quota": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "integer" + }, + "apply_num": { + "description": "카드사 승인번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pay_method": { + "type": "string", + "enum": [ + "card", + "samsung" + ], + "x-typia-required": true, + "x-typia-optional": false + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "type": "boolean", + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "type": "boolean", + "x-typia-required": true, + "x-typia-optional": false + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + } + }, + "required": [ + "card_code", + "card_name", + "card_number", + "card_quota", + "apply_num", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + }, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "간편 결제에 등록된 카드로 결제하기.\n\n`subscribe.payments.again` 은 고객이 간편 결제에 등록한 카드로 결제를 진행하고자 할 때\n호출하는 API 함수이다. 이는 간편하고 불편하고를 떠나, 본질적으로 카드 결제의 일환이기에,\n리턴값은 일반적인 카드 결제 때와 동일한 {@link IIamportCardPayment } 이다.\n\n그리고 `subscribe.payments.again` 은 결제 수단 중 유일하게, 클라이언트 어플리케이션이\n아임포트가 제공하는 결체 창을 사용할 수 없어, 오직 귀하의 백엔드 서버가 아임포트의 API\n함수를 직접 호출해야하는 경우에 해당한다. 따라서 간편 결제에 관하여 아임포트 서버와\n연동하는 백엔드 서버 및 프론트 어플리케이션을 개발할 때, 반드시 이 상황에 대한 별도의\n설계 및 개발이 필요하니, 이 점을 염두에 두기 바란다." + } + ], + "errors": [], + "options": { + "keyword": false, + "separate": null + } +} \ No newline at end of file diff --git a/examples/positional/petstore.json b/examples/positional/petstore.json new file mode 100644 index 0000000..c320973 --- /dev/null +++ b/examples/positional/petstore.json @@ -0,0 +1,1197 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "post", + "path": "/pet", + "name": "pet_post", + "parameters": [ + { + "required": [ + "name", + "photoUrls" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { + "type": "string", + "example": "Dogs" + } + }, + "xml": { + "name": "category" + } + }, + "photoUrls": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "string", + "xml": { + "name": "photoUrl" + } + } + }, + "tags": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "tag" + } + } + }, + "status": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ], + "description": "pet status in the store" + } + }, + "xml": { + "name": "pet" + } + } + ], + "output": { + "required": [ + "name", + "photoUrls" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { + "type": "string", + "example": "Dogs" + } + }, + "xml": { + "name": "category" + } + }, + "photoUrls": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "string", + "xml": { + "name": "photoUrl" + } + } + }, + "tags": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "tag" + } + } + }, + "status": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ], + "description": "pet status in the store" + } + }, + "xml": { + "name": "pet" + } + }, + "description": "Add a new pet to the store" + }, + { + "method": "put", + "path": "/pet", + "name": "pet_put", + "parameters": [ + { + "required": [ + "name", + "photoUrls" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { + "type": "string", + "example": "Dogs" + } + }, + "xml": { + "name": "category" + } + }, + "photoUrls": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "string", + "xml": { + "name": "photoUrl" + } + } + }, + "tags": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "tag" + } + } + }, + "status": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ], + "description": "pet status in the store" + } + }, + "xml": { + "name": "pet" + } + } + ], + "output": { + "required": [ + "name", + "photoUrls" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { + "type": "string", + "example": "Dogs" + } + }, + "xml": { + "name": "category" + } + }, + "photoUrls": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "string", + "xml": { + "name": "photoUrl" + } + } + }, + "tags": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "tag" + } + } + }, + "status": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ], + "description": "pet status in the store" + } + }, + "xml": { + "name": "pet" + } + }, + "description": "Update an existing pet by Id" + }, + { + "method": "get", + "path": "/pet/findByStatus", + "name": "pet_findByStatus_get", + "parameters": [ + { + "type": "object", + "properties": {}, + "required": [] + } + ], + "output": { + "type": "array", + "items": { + "required": [ + "name", + "photoUrls" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { + "type": "string", + "example": "Dogs" + } + }, + "xml": { + "name": "category" + } + }, + "photoUrls": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "string", + "xml": { + "name": "photoUrl" + } + } + }, + "tags": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "tag" + } + } + }, + "status": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ], + "description": "pet status in the store" + } + }, + "xml": { + "name": "pet" + } + } + }, + "description": "Finds Pets by status.\n\nMultiple status values can be provided with comma separated strings" + }, + { + "method": "get", + "path": "/pet/findByTags", + "name": "pet_findByTags_get", + "parameters": [ + { + "type": "object", + "properties": { + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Tags to filter by" + } + }, + "required": [] + } + ], + "output": { + "type": "array", + "items": { + "required": [ + "name", + "photoUrls" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { + "type": "string", + "example": "Dogs" + } + }, + "xml": { + "name": "category" + } + }, + "photoUrls": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "string", + "xml": { + "name": "photoUrl" + } + } + }, + "tags": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "tag" + } + } + }, + "status": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ], + "description": "pet status in the store" + } + }, + "xml": { + "name": "pet" + } + } + }, + "description": "Finds Pets by tags.\n\nMultiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing." + }, + { + "method": "get", + "path": "/pet/{petId}", + "name": "pet_getByPetid", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "ID of pet to return" + } + ], + "output": { + "required": [ + "name", + "photoUrls" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { + "type": "string", + "example": "Dogs" + } + }, + "xml": { + "name": "category" + } + }, + "photoUrls": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "string", + "xml": { + "name": "photoUrl" + } + } + }, + "tags": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "tag" + } + } + }, + "status": { + "type": "string", + "enum": [ + "available", + "pending", + "sold" + ], + "description": "pet status in the store" + } + }, + "xml": { + "name": "pet" + } + }, + "description": "Find pet by ID.\n\nReturns a single pet" + }, + { + "method": "post", + "path": "/pet/{petId}", + "name": "pet_postByPetid", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "ID of pet that needs to be updated" + }, + { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of pet that needs to be updated" + }, + "status": { + "type": "string", + "description": "Status of pet that needs to be updated" + } + }, + "required": [] + } + ], + "description": "" + }, + { + "method": "delete", + "path": "/pet/{petId}", + "name": "pet_eraseByPetid", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Pet id to delete" + } + ], + "description": "" + }, + { + "method": "get", + "path": "/store/inventory", + "name": "store_inventory_get", + "parameters": [], + "output": { + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int32" + } + }, + "description": "Returns pet inventories by status.\n\nReturns a map of status codes to quantities" + }, + { + "method": "post", + "path": "/store/order", + "name": "store_order_post", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "petId": { + "type": "integer", + "format": "int64", + "example": 198772 + }, + "quantity": { + "type": "integer", + "format": "int32", + "example": 7 + }, + "shipDate": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string", + "enum": [ + "placed", + "approved", + "delivered" + ], + "description": "Order Status" + }, + "complete": { + "type": "boolean" + } + }, + "xml": { + "name": "order" + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "petId": { + "type": "integer", + "format": "int64", + "example": 198772 + }, + "quantity": { + "type": "integer", + "format": "int32", + "example": 7 + }, + "shipDate": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string", + "enum": [ + "placed", + "approved", + "delivered" + ], + "description": "Order Status" + }, + "complete": { + "type": "boolean" + } + }, + "xml": { + "name": "order" + } + }, + "description": "Place an order for a pet.\n\nPlace a new order in the store" + }, + { + "method": "get", + "path": "/store/order/{orderId}", + "name": "store_order_getByOrderid", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "ID of order that needs to be fetched" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "petId": { + "type": "integer", + "format": "int64", + "example": 198772 + }, + "quantity": { + "type": "integer", + "format": "int32", + "example": 7 + }, + "shipDate": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string", + "enum": [ + "placed", + "approved", + "delivered" + ], + "description": "Order Status" + }, + "complete": { + "type": "boolean" + } + }, + "xml": { + "name": "order" + } + }, + "description": "Find purchase order by ID.\n\nFor valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions." + }, + { + "method": "delete", + "path": "/store/order/{orderId}", + "name": "store_order_eraseByOrderid", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "ID of the order that needs to be deleted" + } + ], + "description": "Delete purchase order by ID.\n\nFor valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors" + }, + { + "method": "post", + "path": "/user", + "name": "user_post", + "parameters": [ + { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "username": { + "type": "string", + "example": "theUser" + }, + "firstName": { + "type": "string", + "example": "John" + }, + "lastName": { + "type": "string", + "example": "James" + }, + "email": { + "type": "string", + "example": "john@email.com" + }, + "password": { + "type": "string", + "example": "12345" + }, + "phone": { + "type": "string", + "example": "12345" + }, + "userStatus": { + "type": "integer", + "description": "User Status", + "format": "int32", + "example": 1 + } + }, + "xml": { + "name": "user" + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "username": { + "type": "string", + "example": "theUser" + }, + "firstName": { + "type": "string", + "example": "John" + }, + "lastName": { + "type": "string", + "example": "James" + }, + "email": { + "type": "string", + "example": "john@email.com" + }, + "password": { + "type": "string", + "example": "12345" + }, + "phone": { + "type": "string", + "example": "12345" + }, + "userStatus": { + "type": "integer", + "description": "User Status", + "format": "int32", + "example": 1 + } + }, + "xml": { + "name": "user" + } + }, + "description": "Create user.\n\nThis can only be done by the logged in user." + }, + { + "method": "post", + "path": "/user/createWithList", + "name": "user_createWithList_post", + "parameters": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "username": { + "type": "string", + "example": "theUser" + }, + "firstName": { + "type": "string", + "example": "John" + }, + "lastName": { + "type": "string", + "example": "James" + }, + "email": { + "type": "string", + "example": "john@email.com" + }, + "password": { + "type": "string", + "example": "12345" + }, + "phone": { + "type": "string", + "example": "12345" + }, + "userStatus": { + "type": "integer", + "description": "User Status", + "format": "int32", + "example": 1 + } + }, + "xml": { + "name": "user" + } + } + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "username": { + "type": "string", + "example": "theUser" + }, + "firstName": { + "type": "string", + "example": "John" + }, + "lastName": { + "type": "string", + "example": "James" + }, + "email": { + "type": "string", + "example": "john@email.com" + }, + "password": { + "type": "string", + "example": "12345" + }, + "phone": { + "type": "string", + "example": "12345" + }, + "userStatus": { + "type": "integer", + "description": "User Status", + "format": "int32", + "example": 1 + } + }, + "xml": { + "name": "user" + } + }, + "description": "Creates list of users with given input array" + }, + { + "method": "get", + "path": "/user/login", + "name": "user_login_get", + "parameters": [ + { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "The user name for login" + }, + "password": { + "type": "string", + "description": "The password for login in clear text" + } + }, + "required": [] + } + ], + "output": { + "type": "string" + }, + "description": "" + }, + { + "method": "get", + "path": "/user/logout", + "name": "user_logout_get", + "parameters": [], + "description": "" + }, + { + "method": "get", + "path": "/user/{username}", + "name": "user_getByUsername", + "parameters": [ + { + "type": "string", + "description": "The name that needs to be fetched. Use user1 for testing. " + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "username": { + "type": "string", + "example": "theUser" + }, + "firstName": { + "type": "string", + "example": "John" + }, + "lastName": { + "type": "string", + "example": "James" + }, + "email": { + "type": "string", + "example": "john@email.com" + }, + "password": { + "type": "string", + "example": "12345" + }, + "phone": { + "type": "string", + "example": "12345" + }, + "userStatus": { + "type": "integer", + "description": "User Status", + "format": "int32", + "example": 1 + } + }, + "xml": { + "name": "user" + } + }, + "description": "" + }, + { + "method": "put", + "path": "/user/{username}", + "name": "user_putByUsername", + "parameters": [ + { + "type": "string", + "description": "name that need to be deleted" + }, + { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "username": { + "type": "string", + "example": "theUser" + }, + "firstName": { + "type": "string", + "example": "John" + }, + "lastName": { + "type": "string", + "example": "James" + }, + "email": { + "type": "string", + "example": "john@email.com" + }, + "password": { + "type": "string", + "example": "12345" + }, + "phone": { + "type": "string", + "example": "12345" + }, + "userStatus": { + "type": "integer", + "description": "User Status", + "format": "int32", + "example": 1 + } + }, + "xml": { + "name": "user" + } + } + ], + "description": "Update user.\n\nThis can only be done by the logged in user." + }, + { + "method": "delete", + "path": "/user/{username}", + "name": "user_eraseByUsername", + "parameters": [ + { + "type": "string", + "description": "The name that needs to be deleted" + } + ], + "description": "Delete user.\n\nThis can only be done by the logged in user." + } + ], + "errors": [ + { + "method": "post", + "path": "/pet/{petId}/uploadImage", + "messages": [ + "supports only \"application/json\", \"application/x-www-form-urlencoded\", \"multipart/form-data\" and \"text/plain\" content type in the request body." + ] + } + ], + "options": { + "keyword": false, + "separate": null + } +} \ No newline at end of file diff --git a/examples/positional/shopping.json b/examples/positional/shopping.json new file mode 100644 index 0000000..bb8fcf7 --- /dev/null +++ b/examples/positional/shopping.json @@ -0,0 +1,50269 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "get", + "path": "/monitors/health", + "name": "monitors_health_get", + "parameters": [], + "description": "Health check API." + }, + { + "method": "get", + "path": "/monitors/performance", + "name": "monitors_performance_get", + "parameters": [], + "output": { + "type": "object", + "properties": { + "cpu": { + "type": "object", + "properties": { + "user": { + "type": "number" + }, + "system": { + "type": "number" + } + }, + "required": [ + "user", + "system" + ] + }, + "memory": { + "type": "object", + "properties": { + "rss": { + "type": "number" + }, + "heapTotal": { + "type": "number" + }, + "heapUsed": { + "type": "number" + }, + "external": { + "type": "number" + }, + "arrayBuffers": { + "type": "number" + } + }, + "required": [ + "rss", + "heapTotal", + "heapUsed", + "external", + "arrayBuffers" + ] + }, + "resource": { + "type": "object", + "properties": { + "fsRead": { + "type": "number" + }, + "fsWrite": { + "type": "number" + }, + "involuntaryContextSwitches": { + "type": "number" + }, + "ipcReceived": { + "type": "number" + }, + "ipcSent": { + "type": "number" + }, + "majorPageFault": { + "type": "number" + }, + "maxRSS": { + "type": "number" + }, + "minorPageFault": { + "type": "number" + }, + "sharedMemorySize": { + "type": "number" + }, + "signalsCount": { + "type": "number" + }, + "swappedOut": { + "type": "number" + }, + "systemCPUTime": { + "type": "number" + }, + "unsharedDataSize": { + "type": "number" + }, + "unsharedStackSize": { + "type": "number" + }, + "userCPUTime": { + "type": "number" + }, + "voluntaryContextSwitches": { + "type": "number" + } + }, + "required": [ + "fsRead", + "fsWrite", + "involuntaryContextSwitches", + "ipcReceived", + "ipcSent", + "majorPageFault", + "maxRSS", + "minorPageFault", + "sharedMemorySize", + "signalsCount", + "swappedOut", + "systemCPUTime", + "unsharedDataSize", + "unsharedStackSize", + "userCPUTime", + "voluntaryContextSwitches" + ] + } + }, + "required": [ + "cpu", + "memory", + "resource" + ] + }, + "description": "Get performance information.\n\nGet perofmration information composed with CPU, memory and resource usage." + }, + { + "method": "get", + "path": "/monitors/system", + "name": "monitors_system_get", + "parameters": [], + "output": { + "type": "object", + "properties": { + "uid": { + "type": "number", + "title": "Random Unique ID", + "description": "Random Unique ID." + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "`process.argv`" + }, + "commit": { + "type": "object", + "properties": { + "shortHash": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "hash": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "sanitizedSubject": { + "type": "string" + }, + "body": { + "type": "string" + }, + "author": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "description": "Git user account info." + }, + "committer": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "description": "Git user account info." + }, + "authored_at": { + "type": "string" + }, + "commited_at": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shortHash", + "branch", + "hash", + "subject", + "sanitizedSubject", + "body", + "author", + "committer", + "authored_at", + "commited_at", + "tags" + ], + "description": "Git commit info." + }, + "package": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "description": { + "type": "string" + }, + "main": { + "type": "string" + }, + "typings": { + "type": "string" + }, + "scripts": { + "type": "object", + "properties": {}, + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } + }, + "repository": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "git" + ] + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ] + }, + "author": { + "type": "string" + }, + "license": { + "type": "string" + }, + "bugs": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + }, + "required": [ + "url" + ] + }, + "homepage": { + "type": "string" + }, + "devDependencies": { + "type": "object", + "properties": {}, + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } + }, + "dependencies": { + "type": "object", + "properties": {}, + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } + }, + "publishConfig": { + "type": "object", + "properties": { + "registry": { + "type": "string" + } + }, + "required": [ + "registry" + ] + }, + "files": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "version", + "description", + "scripts", + "repository", + "author", + "license", + "bugs", + "homepage", + "dependencies" + ], + "description": "NPM package info." + }, + "created_at": { + "type": "string", + "title": "Creation time of this server", + "description": "Creation time of this server." + } + }, + "required": [ + "uid", + "arguments", + "commit", + "package", + "created_at" + ], + "description": "System Information." + }, + "description": "Get system information.\n\nGet system information with commit and package information.\n\nAs such information is a type of sensitive, response be encrypted." + }, + { + "method": "get", + "path": "/shoppings/admins/authenticate", + "name": "shoppings_admins_authenticate_get", + "parameters": [], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "description": "Get administrator information.\n\nGet {@link IShoppingAdministrator.IInvert administrator} information of\ncurrent {@link IShoppingCustomer customer}.\n\nIf current {@link IShoppingMember member} is not an administrator,\nit throws 403 forbidden exception." + }, + { + "method": "post", + "path": "/shoppings/admins/authenticate", + "name": "shoppings_admins_authenticate_post", + "parameters": [ + { + "type": "object", + "properties": {}, + "description": "Joining request info." + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "description": "Join as an administrator.\n\nJoin as an administrator with {@link IShoppingAdministrator.IJoin joining info}.\n\nThis method is allowed only when the {@link IShoppingCustomer customer} already\nhas joined the {@link IShoppingMember membership}. IF not, he (she) must\naccomplish it before. If not, 403 forbidden exception would be thrown." + }, + { + "method": "put", + "path": "/shoppings/admins/authenticate/login", + "name": "shoppings_admins_authenticate_login_put", + "parameters": [ + { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "title": "Email address of member", + "description": "Email address of member.\n\nIf the member has multiple email addresses, just use one of them." + }, + "password": { + "type": "string", + "title": "Password of the member account", + "description": "Password of the member account." + } + }, + "required": [ + "email", + "password" + ], + "description": "Login request info." + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "description": "Login as an administrator.\n\nLogin as an administrator with {@link IShoppingAdministrator.ILogin login info}.\n\nThis method has exactly same effect with\n{@link ShoppingApi.functional.customers.authenticate.login } function, but\nreturned type is a llttle different. The similar function returns\n{@link IShoppingCustomer } type that starting from the customer information, so\nthat you have to access to the administrator info through\n`customer.member.administrator`. In contrast with that, this method returns\n{@link IShoppingAdministrator.IInvert } type that starting from the administrator\ninfo, so that can access to the customer info through `administrator.customer`.\n\nOf course, to use this function, you had to {@link join } as an administrator\nbefore. If not, 403 forbidden exception would be thrown," + }, + { + "method": "delete", + "path": "/shoppings/admins/coupons/{id}", + "name": "shoppings_admins_coupons_eraseById", + "parameters": [ + { + "type": "string", + "description": "Target coupon's " + } + ], + "description": "Erase a coupon.\n\nErase a {@link IShoppingCoupon coupon} with given ID.\n\nFor reference, if there're some {@link IShoppingCouponTicket tickets}\nwhich are already issued from the target coupon, they would not be affected.\nThose tickets are still valid until their expration time." + }, + { + "method": "post", + "path": "/shoppings/admins/deposits", + "name": "shoppings_admins_deposits_post", + "parameters": [ + { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + -1, + 1 + ] + } + }, + "required": [ + "code", + "source", + "direction" + ] + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "description": "Create a new deposit metadata.\n\nCreate a new {@link IShoppingDeposit deposit} metadata.\n\nThis action means that adding a new origin reason of deposit's income/outcome.\nOf course, creating a new deposit record does not mean that automatically\nincrease or decrease the {@link IShoppingCustomer customer}'s balance\nfollowing the record's reason why. The logic must be developed manually\nin the backend side." + }, + { + "method": "patch", + "path": "/shoppings/admins/deposits", + "name": "shoppings_admins_deposits_patch", + "parameters": [ + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + -1, + 1 + ] + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-deposit.source", + "-deposit.code", + "-deposit.direction", + "+deposit.source", + "+deposit.code", + "+deposit.direction" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "Get deposit metadata list.\n\nList up every {@link IShoppingDeposit deposit} metadata informations\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDeposit.IRequest.search search condition} in the request body.\nAlso, it is possible to customize sequence order of records by configuring\n{@link IShoppingDeposit.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/admins/deposits/{id}", + "name": "shoppings_admins_deposits_getById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target deposit's " + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "description": "Get a deposit metadata.\n\nGet a {@link IShoppingDeposit deposit} metadata information with its ID." + }, + { + "method": "delete", + "path": "/shoppings/admins/deposits/{id}", + "name": "shoppings_admins_deposits_eraseById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target deposit's " + } + ], + "description": "Erase a deposit metadata.\n\nErase a {@link IShoppingDeposit deposit} metadata, so that no more\n{@link IShoppingCustomer customer}'s balance does not be increased or\ndecreased by the deposit's reason why." + }, + { + "method": "get", + "path": "/shoppings/admins/deposits/{code}/get", + "name": "shoppings_admins_deposits_get_getByCode", + "parameters": [ + { + "type": "string", + "description": "" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "description": "Get a deposit metadata by its code.\n\nGet a {@link IShoppingDeposit deposit} metadata information with its code." + }, + { + "method": "post", + "path": "/shoppings/admins/mileages", + "name": "shoppings_admins_mileages_post", + "parameters": [ + { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + -1, + 1 + ] + }, + "value": { + "type": "number", + "nullable": true + } + }, + "required": [ + "code", + "source", + "direction", + "value" + ] + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "description": "Create a new mileage metadata.\n\nCreate a new {@link IShoppingMileage mileage} metadata.\n\nThis action means that adding a new origin reason of mileage's income/outcome.\nOf course, creating a new mileage record does not mean that automatically\nincrease or decrease the {@link IShoppingCustomer customer}'s balance\nfollowing the record's reason why. The logic must be developed manually\nin the backend side." + }, + { + "method": "patch", + "path": "/shoppings/admins/mileages", + "name": "shoppings_admins_mileages_patch", + "parameters": [ + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + -1, + 1 + ] + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-mileage.source", + "-mileage.code", + "-mileage.direction", + "+mileage.source", + "+mileage.code", + "+mileage.direction" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "Get mileage metadata list.\n\nList up every {@link IShoppingMileage mileage} metadata informations\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileage.IRequest.search search condition} in the request body.\nAlso, it is possible to customize sequence order of records by configuring\n{@link IShoppingMileage.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/admins/mileages/{id}", + "name": "shoppings_admins_mileages_getById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target mileage's " + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "description": "Get a mileage metadata.\n\nGet a {@link IShoppingMileage mileage} metadata information with its ID." + }, + { + "method": "delete", + "path": "/shoppings/admins/mileages/{id}", + "name": "shoppings_admins_mileages_eraseById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target mileage's " + } + ], + "description": "Erase a mileage metadata.\n\nErase a {@link IShoppingMileage mileage} metadata, so that no more\n{@link IShoppingCustomer customer}'s balance does not be increased or\ndecreased by the mileage's reason why." + }, + { + "method": "get", + "path": "/shoppings/admins/mileages/{code}/get", + "name": "shoppings_admins_mileages_get_getByCode", + "parameters": [ + { + "type": "string", + "description": "" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "description": "Get a mileage metadata by its code.\n\nGet a {@link IShoppingMileage mileage} metadata information with its code." + }, + { + "method": "post", + "path": "/shoppings/admins/mileages/donations", + "name": "shoppings_admins_mileages_donations_post", + "parameters": [ + { + "type": "object", + "properties": { + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "citizen_id", + "value", + "reason" + ] + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "administrator": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "administrator", + "citizen", + "value", + "reason", + "created_at" + ] + }, + "description": "Donate a mileage to a citizen.\n\nDonate a mileage to a specific {@link IShoppingCitizen citizen} from\ncurrent {@link IShoppingAdministrator administrator}, with detailed\nreason why.\n\nNote that, as donating mileage affects to the citizen's balance and\ncurrent shopping mall's operating profit, administrator must archive\nthe detailed reason why the mileage is donated." + }, + { + "method": "patch", + "path": "/shoppings/admins/mileages/donations", + "name": "shoppings_admins_mileages_donations_patch", + "parameters": [ + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$" + }, + "name": { + "type": "string" + } + } + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-donation.created_at", + "-donation.value", + "-donation.reason", + "+donation.created_at", + "+donation.value", + "+donation.reason" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "administrator": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "administrator", + "citizen", + "value", + "reason", + "created_at" + ] + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every mileage donation histories.\n\nList up every {@link IShoppingMileageDonation mileage donation histories}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileageDonation.IRequest.search search condition} in\nthe request body. Also, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingMileageDonation.IRequest.sort sort}." + }, + { + "method": "get", + "path": "/shoppings/admins/mileages/donations/{id}", + "name": "shoppings_admins_mileages_donations_getById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target history's " + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "administrator": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "administrator", + "citizen", + "value", + "reason", + "created_at" + ] + }, + "description": "Get a mileage donation history.\n\nGet a {@link IShoppingMileageDonation mileage donation history} with its ID." + }, + { + "method": "post", + "path": "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments", + "name": "shoppings_admins_sales_questions_comments_postBySaleidAndInquiryid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + }, + { + "method": "patch", + "path": "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments", + "name": "shoppings_admins_sales_questions_comments_patchBySaleidAndInquiryid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the comments with pagination and searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + { + "method": "get", + "path": "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments/{id}", + "name": "shoppings_admins_sales_questions_comments_getBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + { + "method": "put", + "path": "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments/{id}", + "name": "shoppings_admins_sales_questions_comments_putBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot content of the comment." + }, + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "patch", + "path": "/shoppings/admins/sales/{saleId}/questions", + "name": "shoppings_admins_sales_questions_patchBySaleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the question." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + }, + { + "method": "patch", + "path": "/shoppings/admins/sales/{saleId}/questions/abridges", + "name": "shoppings_admins_sales_questions_abridges_patchBySaleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the question." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at } function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/admins/sales/{saleId}/questions/{id}", + "name": "shoppings_admins_sales_questions_getBySaleidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target question's " + } + ], + "output": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "type": { + "type": "string", + "enum": [ + "question" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "secret", + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Question about sale snapshot.\n\n`IShoppingSaleQuestion` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} wants to ask something\nabout a {@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at\nthe time) registered by the {@link IShoppingSeller seller}.\n\nAnd, like most shopping malls, `IShoppingSaleQuestion` also provides\na {@link secret } attribute, allowing you to create a \"secret message\" that can\nonly be viewed by the seller and the customer who wrote the question." + }, + "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret }\nvalue is `false`." + }, + { + "method": "post", + "path": "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments", + "name": "shoppings_admins_sales_reviews_comments_postBySaleidAndInquiryid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + }, + { + "method": "patch", + "path": "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments", + "name": "shoppings_admins_sales_reviews_comments_patchBySaleidAndInquiryid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the comments with pagination and searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + { + "method": "get", + "path": "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments/{id}", + "name": "shoppings_admins_sales_reviews_comments_getBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + { + "method": "put", + "path": "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments/{id}", + "name": "shoppings_admins_sales_reviews_comments_putBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot content of the comment." + }, + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "patch", + "path": "/shoppings/admins/sales/{saleId}/reviews", + "name": "shoppings_admins_sales_reviews_patchBySaleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at", + "-score", + "+score" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the review." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + }, + { + "method": "patch", + "path": "/shoppings/admins/sales/{saleId}/reviews/abridges", + "name": "shoppings_admins_sales_reviews_abridges_patchBySaleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at", + "-score", + "+score" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the review." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at } function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/admins/sales/{saleId}/reviews/{id}", + "name": "shoppings_admins_sales_reviews_getBySaleidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target review's " + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "review" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot content of the review article." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Reviews for sale snapshots.\n\n`IShoppingSaleReview` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} purchases a\n{@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at the time)\nregistered by the {@link IShoppingSeller seller} as a product and leaves a\nreview and rating for it.\n\nFor reference, `IShoppingSaleReview` and\n{@link IShoppingOrderGod shopping_order_goods} have a logarithmic relationship\nof N: 1, but this does not mean that customers can continue to write reviews\nfor the same product indefinitely. Wouldn't there be restrictions, such as\nif you write a review once, you can write an additional review a month later?" + }, + "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales." + }, + { + "method": "put", + "path": "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}", + "name": "shoppings_admins_systematic_channels_categories_putByChannelcodeAndId", + "parameters": [ + { + "type": "string", + "description": "Belonged channel's " + }, + { + "type": "string", + "description": "Target category's " + }, + { + "type": "object", + "properties": { + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent category's ID", + "description": "Parent category's ID." + }, + "name": { + "type": "string", + "title": "Representative name of the category", + "description": "Representative name of the category.\n\nThe name must be unique within the parent category. If no parent exists,\nthen the name must be unique within the channel between no parent\ncategories." + } + }, + "required": [ + "parent_id", + "name" + ], + "description": "Creation information of the category." + } + ], + "description": "Update a category.\n\nUpdate a {@link IShoppingChannelCategory category}'s name. If required,\nit is possible to change the parent category by its ID. Of course, detaching\nfrom the parent category so that becoming the root category is also possible." + }, + { + "method": "delete", + "path": "/shoppings/admins/systematic/channels/{channelCode}/categories/merge", + "name": "shoppings_admins_systematic_channels_categories_merge_eraseByChannelcode", + "parameters": [ + { + "type": "string", + "description": "Belonged channel's " + }, + { + "type": "object", + "properties": { + "keep": { + "type": "string", + "format": "uuid", + "title": "Target record to keep after merging", + "description": "Target record to keep after merging.\n\nAfter merge process, {@link absorbed } records would be merged into\nthis {@link keep } record." + }, + "absorbed": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "To be absorbed to {@link keep } after merging", + "description": "To be absorbed to {@link keep } after merging." + } + }, + "required": [ + "keep", + "absorbed" + ], + "description": "Record Merge DTO.\n\n`IRecordMerge` is a structure for merging records.\n\nThe `merge` means that merging multiple {@link IRecordMerge.absorbed }\nrecords into {@link IRecordMerge.keep } instead of deleting\n{@link IRecordMerge.absorbed } records.\n\nIf there're some dependent tables of the target `table` having\nunique constraint on foriegn key column, such dependent tables\nalso perform the merge process, too.\n\nOf course, if there're another dependent tables under those\ndependents, they also perform the merge process recursively as well.\nSuch recursive merge process still works for self-recursive\n(tree-structured) tables." + } + ], + "description": "Merge multiple categories into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingChannelCategory category}, because it is a systematic\nentity affecting to all other core entities like\n{@link IShoppingSale sales}. Instead of deleting, you can merge multiple\ncategories into one.\n\nIf you specify a category to absorb others, then all of other categories\nwill be merged into the specified one. Also, subsidiary entities of\ncategories also be merged and their references also be merged cascadingly." + }, + { + "method": "post", + "path": "/shoppings/admins/systematic/channels", + "name": "shoppings_admins_systematic_channels_post", + "parameters": [ + { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "code", + "name" + ], + "description": "Creation information of the channel." + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "description": "Create a new channel.\n\nCreate a new {@link IShoppingChannel channel} with given code and name.\n\nAs channel means an individual market,\n{@link IShoppingAdministrator administrator} should perform this action\nonly when a new application being registered." + }, + { + "method": "patch", + "path": "/shoppings/admins/systematic/channels", + "name": "shoppings_admins_systematic_channels_patch", + "parameters": [ + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-channel.code", + "-channel.name", + "-channel.created_at", + "+channel.code", + "+channel.name", + "+channel.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the channels with pagination and searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + }, + { + "method": "put", + "path": "/shoppings/admins/systematic/channels/{id}", + "name": "shoppings_admins_systematic_channels_putById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target channel's " + }, + { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "name" + ], + "description": "Updating information of the channel." + } + ], + "description": "Update a channel.\n\nUpdate a {@link IShoppingChannel channel}'s name.\n\nNote that, it is not possible to change the channel's code. If you want to\nto do it forcibly, then {@link create } new one and {@link merge } with it." + }, + { + "method": "delete", + "path": "/shoppings/admins/systematic/channels/merge", + "name": "shoppings_admins_systematic_channels_merge_erase", + "parameters": [ + { + "type": "object", + "properties": { + "keep": { + "type": "string", + "format": "uuid", + "title": "Target record to keep after merging", + "description": "Target record to keep after merging.\n\nAfter merge process, {@link absorbed } records would be merged into\nthis {@link keep } record." + }, + "absorbed": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "To be absorbed to {@link keep } after merging", + "description": "To be absorbed to {@link keep } after merging." + } + }, + "required": [ + "keep", + "absorbed" + ], + "description": "Record Merge DTO.\n\n`IRecordMerge` is a structure for merging records.\n\nThe `merge` means that merging multiple {@link IRecordMerge.absorbed }\nrecords into {@link IRecordMerge.keep } instead of deleting\n{@link IRecordMerge.absorbed } records.\n\nIf there're some dependent tables of the target `table` having\nunique constraint on foriegn key column, such dependent tables\nalso perform the merge process, too.\n\nOf course, if there're another dependent tables under those\ndependents, they also perform the merge process recursively as well.\nSuch recursive merge process still works for self-recursive\n(tree-structured) tables." + } + ], + "description": "Merge multiple channels into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingChannel channel}, because it is a systematic entity\naffecting to all other core entities like customers, members and\nsales. Instead of deleting, you can merge multiple channels into one.\n\nIf you specify a channel to absorb others, then all of other channels\nwill be merged into the specified one. Also, subsidiary entities of\nchannels also be merged and their references also be merged cascadingly." + }, + { + "method": "post", + "path": "/shoppings/admins/systematic/sections", + "name": "shoppings_admins_systematic_sections_post", + "parameters": [ + { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + } + }, + "required": [ + "code", + "name" + ], + "description": "Creation information of the section." + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "description": "Create a new section.\n\nCreate a new {@link IShoppingSection section} with given code and name.\n\nAs section means a spatial unit of a market that handling different type\nof products with other section, {@link IShoppingAdministrator administrator}\nshould perform this action only when a new section being required." + }, + { + "method": "patch", + "path": "/shoppings/admins/systematic/sections", + "name": "shoppings_admins_systematic_sections_patch", + "parameters": [ + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-section.code", + "-section.name", + "-section.created_at", + "+section.code", + "+section.name", + "+section.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the sections with pagination and searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/admins/systematic/sections/{id}", + "name": "shoppings_admins_systematic_sections_getById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target section's " + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." + }, + { + "method": "put", + "path": "/shoppings/admins/systematic/sections/{id}", + "name": "shoppings_admins_systematic_sections_putById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target section's " + }, + { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + } + }, + "required": [ + "name" + ], + "description": "Updating information of the section." + } + ], + "description": "Update a section.\n\nUpdate a {@link IShoppingSection section}'s name.\n\nNote that, it is not possible to change the section's code. If you want to\nto do it forcibly, then {@link create } new one and {@link merge } with it." + }, + { + "method": "delete", + "path": "/shoppings/admins/systematic/sections/merge", + "name": "shoppings_admins_systematic_sections_merge_erase", + "parameters": [ + { + "type": "object", + "properties": { + "keep": { + "type": "string", + "format": "uuid", + "title": "Target record to keep after merging", + "description": "Target record to keep after merging.\n\nAfter merge process, {@link absorbed } records would be merged into\nthis {@link keep } record." + }, + "absorbed": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "To be absorbed to {@link keep } after merging", + "description": "To be absorbed to {@link keep } after merging." + } + }, + "required": [ + "keep", + "absorbed" + ], + "description": "Record Merge DTO.\n\n`IRecordMerge` is a structure for merging records.\n\nThe `merge` means that merging multiple {@link IRecordMerge.absorbed }\nrecords into {@link IRecordMerge.keep } instead of deleting\n{@link IRecordMerge.absorbed } records.\n\nIf there're some dependent tables of the target `table` having\nunique constraint on foriegn key column, such dependent tables\nalso perform the merge process, too.\n\nOf course, if there're another dependent tables under those\ndependents, they also perform the merge process recursively as well.\nSuch recursive merge process still works for self-recursive\n(tree-structured) tables." + } + ], + "description": "Merge multiple sections into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingSection section}, because it is a systematic entity\naffecting to all other core entities like {@link IShoppingSale sales}.\nInstead of deleting, you can merge multiple sections into one.\n\nIf you specify a section to absorb others, then all of other sections\nwill be merged into the specified one. Also, subsidiary entities of\nsections also be merged and their references also be merged cascadingly." + }, + { + "method": "get", + "path": "/shoppings/admins/systematic/sections/{code}/get", + "name": "shoppings_admins_systematic_sections_get_getByCode", + "parameters": [ + { + "type": "string", + "description": "Target section's " + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code." + }, + { + "method": "patch", + "path": "/shoppings/customers/authenticate/refresh", + "name": "shoppings_customers_authenticate_refresh_patch", + "parameters": [ + { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + } + ], + "output": { + "type": "object", + "properties": { + "setHeaders": { + "type": "object", + "properties": { + "Authorization": { + "type": "string" + } + }, + "required": [ + "Authorization" + ] + }, + "token": { + "type": "object", + "properties": { + "access": { + "type": "string" + }, + "refresh": { + "type": "string" + }, + "expired_at": { + "type": "string", + "format": "date-time" + }, + "refreshable_until": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "access", + "refresh", + "expired_at", + "refreshable_until" + ] + }, + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "setHeaders", + "token", + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ] + }, + "description": "Refresh the authentication token.\n\nCreate a new {@link IShoppingCustomer.IToken.access access token} of a\n{@link IShoppingCustomer customer} with the pre-issued\n{@link IShoppingCustomer.IToken.refresh refresh} token.\n\nNote that, this function is available until the\n{@link IShoppingCustomer.IToken.refreshable_until } value." + }, + { + "method": "get", + "path": "/shoppings/customers/authenticate", + "name": "shoppings_customers_authenticate_get", + "parameters": [], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "description": "Get current customer info.\n\nGet current {@link IShoppingCustomer customer} information from the\n{@link IShoppingCustomer.IToken.access access token}." + }, + { + "method": "post", + "path": "/shoppings/customers/authenticate", + "name": "shoppings_customers_authenticate_post", + "parameters": [ + { + "type": "object", + "properties": { + "channel_code": { + "type": "string" + }, + "external_user": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "password": { + "type": "string", + "title": "Password of external user from the external system", + "description": "Password of external user from the external system.\n\nThis is a password issued to the user by an external service,\nand is by no means the actual user password. However, for\n{@link IShoppingCustomer customers} who entered the same\napplication and code as the current external system user, this is\nto determine whether to view this as a correct external system\nuser or a violation." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "citizen", + "application", + "uid", + "nickname", + "password", + "data" + ], + "nullable": true + }, + "href": { + "type": "string", + "format": "uri" + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ] + } + }, + "required": [ + "channel_code", + "external_user", + "href", + "referrer" + ] + } + ], + "output": { + "type": "object", + "properties": { + "setHeaders": { + "type": "object", + "properties": { + "Authorization": { + "type": "string" + } + }, + "required": [ + "Authorization" + ] + }, + "token": { + "type": "object", + "properties": { + "access": { + "type": "string" + }, + "refresh": { + "type": "string" + }, + "expired_at": { + "type": "string", + "format": "date-time" + }, + "refreshable_until": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "access", + "refresh", + "expired_at", + "refreshable_until" + ] + }, + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "setHeaders", + "token", + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ] + }, + "description": "Create a new customer record.\n\nThis shopping mall system defines everyone participating in this market as\na \"customer\". And the customer records are not archived based on individual\n{@link IShoppingCitizen people}, but based on the unit of connection.\nTherefore, even if it is the same person, a new {@link IShoppingCustomer }\nrecord is created every time a connection is made.\n\nTherefore, all Client Applications that access this service must first call\nthis function, report the customer's inflow path to the server, and create\nan {@link IShoppingCustomer.IToken.access access token}. If you skip this\nfunction call, all the other API functions would be prohibited. There is no\nexception, even if you want to {@link activate } your citizenship or\n{@link login } with your {@link IShoppingMember member account}. Before\nauthenticating yourself or logging in, be sure to call this function first.\nThis also applies when an {@link IShoppingAdministrator administrator} or\n{@link IShoppingSeller seller} logs in.\n\nAlso, the authentication token has an\n{@link IShoppingCustomer.IToken.expired_at expiration time}\nand cannot be used permanently. For reference, the authentication token is\nvalid for 3 hours, and if you want to maintain customer authentication even\nafter 3 hours, you must call the {@link refresh } function." + }, + { + "method": "post", + "path": "/shoppings/customers/authenticate/join", + "name": "shoppings_customers_authenticate_join_post", + "parameters": [ + { + "type": "object", + "properties": { + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "citizen": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "mobile", + "name" + ], + "description": "Citizen information.", + "title": "Citizen information", + "nullable": true + }, + "email": { + "type": "string", + "format": "email", + "title": "Email address of member", + "description": "Email address of member.\n\nIf the member has multiple email addresses, just use one of them." + }, + "password": { + "type": "string", + "title": "Password of the member account", + "description": "Password of the member account." + } + }, + "required": [ + "nickname", + "citizen", + "email", + "password" + ], + "description": "Joining request info." + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "description": "Join membership.\n\n{@link IShoppingCustomer Customer} signs up for\n{@link IShoppingMember membership} of current shopping mall system.\n\nIf you've performed the {@link IShoppingCitizen citizenship}\n{@link activate activation} too, then you can skip the {@link activate }\nfunction calling everytime you log in from now on. Also, if the person had\n{@link IShoppingOrder purchased} with {@link activate } and {@link external }\nfunction calling, you can also access to the order history too. In other\nwords, activity details prior to membership registration can also be\naccessed with continuity.\n\nFor reference, as described in the {@link create } function, before calling\nthis `join` function, you must first create a customer record and token by\ncalling the {@link create } function." + }, + { + "method": "put", + "path": "/shoppings/customers/authenticate/login", + "name": "shoppings_customers_authenticate_login_put", + "parameters": [ + { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "title": "Email address of member", + "description": "Email address of member.\n\nIf the member has multiple email addresses, just use one of them." + }, + "password": { + "type": "string", + "title": "Password of the member account", + "description": "Password of the member account." + } + }, + "required": [ + "email", + "password" + ], + "description": "Login request info." + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "description": "Membership login.\n\n{@link IShoppingCustomer Customer} logs in with his/her\n{@link IShoppingMember membership} account with the email and password.\n\nIf the {@link IShoppingMember member} has previously performed\n{@link activate citizenship activation}, the {@link IShoppingCustomer.citizen }\nvalue would be filled in accordingly. And if the member has also signed up\nas an {@link IShoppingAdministrator administrator} or\n{@link IShoppingSeller seller}, the relevant information is also entered\naccordingly.\n\nFor reference, as described in the {@link create } function, before calling\nthis `login` function, you must first create a customer record and token by\ncalling the {@link create } function." + }, + { + "method": "post", + "path": "/shoppings/customers/authenticate/activate", + "name": "shoppings_customers_authenticate_activate_post", + "parameters": [ + { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "mobile", + "name" + ], + "description": "Creation information of citizen verification." + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "description": "Activate citizenship.\n\n{@link IShoppingCustomer Customer} activates his/her\n{@link IShoppingCitizen citizenship} with mobile number and real name.\n\nIf the custommer already {@link join joined} to the\n{@link IShoppingMember membership}, then you can skip the citizenship\n{@link activation } function calling everytime you log in from now on.\nOf course, such story would be same to the {@link external } function, too.\n\nFor reference, as described in the {@link create } function, before calling\nthis `activate` function, you must first create a customer record and token\nby calling the {@link create } function." + }, + { + "method": "post", + "path": "/shoppings/customers/authenticate/external", + "name": "shoppings_customers_authenticate_external_post", + "parameters": [ + { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "password": { + "type": "string", + "title": "Password of external user from the external system", + "description": "Password of external user from the external system.\n\nThis is a password issued to the user by an external service,\nand is by no means the actual user password. However, for\n{@link IShoppingCustomer customers} who entered the same\napplication and code as the current external system user, this is\nto determine whether to view this as a correct external system\nuser or a violation." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "citizen", + "application", + "uid", + "nickname", + "password", + "data" + ], + "description": "Creation information of external user." + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "description": "Enroll external user info.\n\n{@link IShoppingCustomer Customer} enrolls his/her\n{@link IShoppingExternalUser external user} information from other service.\n\nIt has similar effect with the {@link join membership joining} function,\nso that if you've performed the {@link IShoppingCitizen citizenship}\n{@link activate activation} too, then you can skip the {@link activate }\nfunction calling everytime you call this `external` function with same\ninfo from now on. Also, if the person had\n{@link IShoppingOrder purchased} with {@link activate } and {@link join }\nfunction calling, you can also access to the order history too. In other\nwords, activity details prior to external server registration can also be\naccessed with continuity.\n\nFor reference, as described in the {@link create } function, before calling\nthis `external` function, you must first create a customer record and token\nby calling the {@link create } function." + }, + { + "method": "put", + "path": "/shoppings/customers/authenticate/password/change", + "name": "shoppings_customers_authenticate_password_change_put", + "parameters": [ + { + "type": "object", + "properties": { + "oldbie": { + "type": "string", + "title": "Current password", + "description": "Current password." + }, + "newbie": { + "type": "string", + "title": "The new password to change", + "description": "The new password to change." + } + }, + "required": [ + "oldbie", + "newbie" + ], + "description": "Request info of password change." + } + ], + "description": "Change password.\n\nChange password of {@link IShoppingMember member} with the current password.\n\nThe reason why the current password is required is for security." + }, + { + "method": "post", + "path": "/shoppings/customers/deposits/charges", + "name": "shoppings_customers_deposits_charges_post", + "parameters": [ + { + "type": "object", + "properties": { + "value": { + "type": "number" + } + }, + "required": [ + "value" + ] + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "publish": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "paid_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancelled_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at" + ], + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "value": { + "type": "number" + } + }, + "required": [ + "id", + "customer", + "publish", + "created_at", + "value" + ] + }, + "description": "Create a new deposit charge application.\n\nCreate a new {@link IShoppingDepositCharge deposit charge application}.\n\nBy the way, this function does not mean completion the deposit charge, but\nmeans just {@link IShoppingCustomer customer} is appling the deposit charge.\nThe deposit charge be completed only when customer\n{@link IShoppingDepositChargePublish.publish pay} the deposit charge." + }, + { + "method": "patch", + "path": "/shoppings/customers/deposits/charges", + "name": "shoppings_customers_deposits_charges_patch", + "parameters": [ + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + }, + "state": { + "type": "string", + "enum": [ + "pending", + "published", + "payed", + "cancelled" + ] + }, + "publish": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "payment": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "required": [ + "state" + ] + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-value", + "-publish.created_at", + "-publish.paid_at", + "+value", + "+publish.created_at", + "+publish.paid_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "publish": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "paid_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancelled_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at" + ], + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "value": { + "type": "number" + } + }, + "required": [ + "id", + "customer", + "publish", + "created_at", + "value" + ] + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every deposit charges.\n\nList up every {@link IShoppingDepositCharge deposit charges} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDepositCharge.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingDepositCharge.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/customers/deposits/charges/{id}", + "name": "shoppings_customers_deposits_charges_getById", + "parameters": [ + { + "type": "string", + "description": "Target deposit charge's " + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "publish": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "paid_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancelled_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at" + ], + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "value": { + "type": "number" + } + }, + "required": [ + "id", + "customer", + "publish", + "created_at", + "value" + ] + }, + "description": "Get a deposit charge info.\n\nGet a {@link IShoppingDepositCharge deposit charge} information." + }, + { + "method": "put", + "path": "/shoppings/customers/deposits/charges/{id}", + "name": "shoppings_customers_deposits_charges_putById", + "parameters": [ + { + "type": "string", + "description": "Target deposit charge's " + }, + { + "type": "object", + "properties": { + "value": { + "type": "number" + } + }, + "required": [ + "value" + ] + } + ], + "description": "Update a deposit charge application.\n\nUpdate value of a {@link IShoppingDepositCharge deposit charge application}\nthat has been applied by the {@link IShoppingCustomer }.\n\nIf the charge has been {@link IShoppingDepositChargePublish published},\nthen it is not possible to update the deposit charge. Only 410 gone exception\nwould be thrown." + }, + { + "method": "delete", + "path": "/shoppings/customers/deposits/charges/{id}", + "name": "shoppings_customers_deposits_charges_eraseById", + "parameters": [ + { + "type": "string", + "description": "Target deposit charge's " + } + ], + "description": "Erase a deposit charge application.\n\nErase a {@link IShoppingDepositCharge deposit charge application} that has been\napplied by the {@link IShoppingCustomer }.\n\nIf the charge has been {@link IShoppingDepositChargePublish published}, then\nit is not possible to erase the deposit charge. In that case, you've to cancel\nthe payment by calling the {@link publish.cancel } function." + }, + { + "method": "get", + "path": "/shoppings/customers/deposits/charges/{chargeId}/publish/able", + "name": "shoppings_customers_deposits_charges_publish_able_getByChargeid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target charge's " + } + ], + "output": { + "type": "boolean" + }, + "description": "Check publishable.\n\nTest whether the {@link IShoppingDepositCharge charge} is publishable or not.\n\nIf the charge has not been {@link IShoppingDepositChargePublish published} and\nnot deleted yet, then it is possible to publish the charge" + }, + { + "method": "post", + "path": "/shoppings/customers/deposits/charges/{chargeId}/publish", + "name": "shoppings_customers_deposits_charges_publish_postByChargeid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target charge's " + }, + { + "type": "object", + "properties": { + "vendor": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "vendor", + "uid" + ] + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "paid_at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancelled_at": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at" + ] + }, + "description": "Publish a charge.\n\n{@link IShoppingDepositChargePublish Publish} a\n{@link IShoppingDepositCharge charge} that has been applied by the\n{@link IShoppingCustomer } with payment information gotten from the\npayment vendor system.\n\nAlso, the payment time can be different with the publish time. For example,\nif the payment method is manual bank account transfer, then the payment\nwould be delayed until the customer actually transfer the money. In that\ncase, {@link IShoppingDepositChargePublish.paid_at } would be `null` value,\nso that you have to check it after calling this publish function." + }, + { + "method": "patch", + "path": "/shoppings/customers/deposits/histories", + "name": "shoppings_customers_deposits_histories_patch", + "parameters": [ + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "deposit": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + -1, + 1 + ] + } + } + }, + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-deposit.source", + "-deposit.code", + "-deposit.direction", + "+deposit.source", + "+deposit.code", + "+deposit.direction", + "-history.value", + "-history.created_at", + "+history.value", + "+history.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "deposit": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "source_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "citizen", + "deposit", + "source_id", + "value", + "balance", + "created_at" + ] + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every deposit histories.\n\nList up every {@link IShoppingDepositHistory deposit histories} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDepositHistory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingDepositHistory.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/customers/deposits/histories/{id}", + "name": "shoppings_customers_deposits_histories_getById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "" + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "deposit": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "source_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "citizen", + "deposit", + "source_id", + "value", + "balance", + "created_at" + ] + }, + "description": "Get a deposit history info.\n\nGet a {@link IShoppingDepositHistory deposit history} information." + }, + { + "method": "get", + "path": "/shoppings/customers/deposits/histories/balance", + "name": "shoppings_customers_deposits_histories_balance_get", + "parameters": [], + "output": { + "type": "number" + }, + "description": "Get balance of the deposit.\n\nGet current balance of the deposit of the {@link IShoppingCustomer customer}." + }, + { + "method": "patch", + "path": "/shoppings/customers/mileages/histories", + "name": "shoppings_customers_mileages_histories_patch", + "parameters": [ + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "mileage": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + -1, + 1 + ] + } + } + }, + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-mileage.source", + "-mileage.code", + "-mileage.direction", + "+mileage.source", + "+mileage.code", + "+mileage.direction", + "-history.value", + "-history.created_at", + "+history.value", + "+history.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "mileage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "source_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "citizen", + "mileage", + "source_id", + "value", + "balance", + "created_at" + ] + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every mileage histories.\n\nList up every {@link IShoppingMileageHistory mileage histories} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileageHistory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingMileageHistory.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/customers/mileages/histories/{id}", + "name": "shoppings_customers_mileages_histories_getById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target mileage history's " + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "mileage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "type": "number", + "enum": [ + 1, + -1 + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "source_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "citizen", + "mileage", + "source_id", + "value", + "balance", + "created_at" + ] + }, + "description": "Get a mileage history info.\n\nGet a {@link IShoppingMileageHistory mileage history} information." + }, + { + "method": "get", + "path": "/shoppings/customers/mileages/histories/balance", + "name": "shoppings_customers_mileages_histories_balance_get", + "parameters": [], + "output": { + "type": "number" + }, + "description": "Get balance of the mileage.\n\nGet current balance of the mileage of the {@link IShoppingCustomer customer}." + }, + { + "method": "put", + "path": "/shoppings/customers/carts/{cartId}/commodities/{id}", + "name": "shoppings_customers_carts_commodities_putByCartidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "nullable": true, + "description": "Belonged cart's ID" + }, + { + "type": "string", + "format": "uuid", + "description": "Target commodity's " + }, + { + "type": "object", + "properties": { + "volume": { + "type": "integer", + "minimum": 1, + "title": "Volume of the commodity to purchase", + "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity } values." + } + }, + "required": [ + "volume" + ], + "description": "Update information of a shopping cart commodity." + } + ], + "description": "Update a commodity (volume).\n\nUpdate a {@link IShoppingCartCommodity commodity}'s volume in the\nshopping cart.\n\nIf the *cartId* is different with the belonged cart's ID, then 404 not\nfound exception would be thrown. Otherwise, the *cartId* has `null` value,\nsuch dependency checking would be skipped, but still ownership would be\nvalidated.\n\nAlso, if target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock} suddenly, then 410\ngone error would be thrown, either." + }, + { + "method": "delete", + "path": "/shoppings/customers/carts/{cartId}/commodities/{id}", + "name": "shoppings_customers_carts_commodities_eraseByCartidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "nullable": true, + "description": "Belonged cart's ID" + }, + { + "type": "string", + "format": "uuid", + "description": "Target commodity's " + } + ], + "description": "Erase a commodity.\n\nErase a {@link IShoppingCartCommodity commodity} from the shopping cart.\n\nIf the commodity is on an {@link IShoppingOrder order} process, it is not\npossible to erase it. Instead, if the order has been\n{@link IShoppingOrderPublish published}, then it would not be appread in\nthe shopping cart more. If the order be erased, then you also can continue\nerasinng the commodity, neither." + }, + { + "method": "get", + "path": "/shoppings/customers/carts/{cartId}/commodities/{id}/replica", + "name": "shoppings_customers_carts_commodities_replica_getByCartidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "nullable": true, + "description": "Belonged cart's ID" + }, + { + "type": "string", + "format": "uuid", + "description": "Target commodity's " + } + ], + "output": { + "type": "object", + "properties": { + "sale_id": { + "type": "string", + "format": "uuid", + "title": "Target sale's {@link IShoppingSale.id }", + "description": "Target sale's {@link IShoppingSale.id }." + }, + "stocks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "unit_id": { + "type": "string", + "format": "uuid", + "title": "Target unit's {@link IShoppingSaleUnit.id }", + "description": "Target unit's {@link IShoppingSaleUnit.id }." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "Target stock's {@link IShoppingSaleUnitStock.id }", + "description": "Target stock's {@link IShoppingSaleUnitStock.id }.\n\nIt must be matched with the {@link choices } property." + }, + "choices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "option_id": { + "type": "string", + "format": "uuid", + "title": "Target option's {@link IShoppingSaleUnitOption.id }", + "description": "Target option's {@link IShoppingSaleUnitOption.id }." + }, + "candidate_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id }", + "description": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id }.\n\nWhen target option's type is `select`, then this attribute is not\n`null` but has a value." + }, + "value": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ], + "title": "Written value about the option", + "description": "Written value about the option.\n\nWhen target option's type is not `select`, but an atomic type value\nlike `boolean`, `number` or `string`, then this attribute is not\n`null` but has the matched atomic value." + } + }, + "required": [ + "option_id", + "candidate_id", + "value" + ], + "description": "Creation information of the choice for each option.\n\nWhen record being created, its corresponding structure would be\n{@link IShoppingSaleUnitStockChoice.IInvert }." + }, + "title": "Creation information of the choices for each option", + "description": "Creation information of the choices for each option." + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "Quantity of the stock to purchase", + "description": "Quantity of the stock to purchase.\n\nThis value is multiplied by the {@link IShoppingCartCommodity.volume }." + } + }, + "required": [ + "unit_id", + "stock_id", + "choices", + "quantity" + ], + "description": "Creation information of the commodity stock of shopping cart.\n\nWhen record being created, its corresponding structure would be\n{@link IShoppingSaleSnapshotUnit.IInvert } and\n{@link IShoppingSaleSnapshotUnitStock.IInvert }." + }, + "minItems": 1, + "title": "List of the stocks to be purchased", + "description": "List of the stocks to be purchased." + }, + "volume": { + "type": "integer", + "minimum": 1, + "title": "Volume of the commodity to purchase", + "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity } values." + }, + "accumulate": { + "type": "boolean", + "title": "Whether to accumulate the volume or not", + "description": "Whether to accumulate the volume or not.\n\nIf this attribute is not `false` and there's same commodity that\ncomposed with same stocks and options, then the volume will be\naccumulated to the existed one.\n\nOtherwise, duplicated commodity would be newly created." + } + }, + "required": [ + "sale_id", + "stocks", + "volume" + ], + "description": "Creation information of a shopping cart commodity." + }, + "description": "Get replica of a commodity.\n\nGet a {@link IShoppingCartCommodity.ICreate } typed info of the target\ncommodity for replication.\n\nBy the way, if the *cartId* is different with the belonged cart's ID,\nthen 404 not found exception would be thrown. Otherwise, the *cartId*\nhas `null` value, such dependency checking would be skipped, but still\nownership would be validated.\n\nAlso, if target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock} suddenly,\nthen 410 gone error would be thrown, either." + }, + { + "method": "delete", + "path": "/shoppings/customers/orders/{id}", + "name": "shoppings_customers_orders_eraseById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target order's " + } + ], + "description": "Erase an order application.\n\nErase an order application that has been applied by the\n{@link IShoppingCustomer }.\n\nIf the order has been {@link IShoppingOrderPublish published}, then it is\nnot possible to erase the order. In that case, you've to cancel the\npayment by calling the {@link publish.cancel } function." + }, + { + "method": "put", + "path": "/shoppings/customers/orders/{orderId}/goods/{id}/confirm", + "name": "shoppings_customers_orders_goods_confirm_putByOrderidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged order's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target good's " + } + ], + "description": "Confirm an order good.\n\nConfirm an {@link IShoppingOrderGood order good} that has been\ncompleted {@link IShoppingDelivery delivering} to the\n{@link IShoppingCustomer customer}.\n\nIn other words, belonged {@link IShoppingOrder order} must be\n{@link IShoppingPublish.paid_at published, paid} and delivery of\nthe good must be {@link IShoppingDeliveryJourney arrived} to the\ncustomer. If not, 428 unprocessable entity error would be thrown." + }, + { + "method": "get", + "path": "/shoppings/customers/orders/{orderId}/publish/able", + "name": "shoppings_customers_orders_publish_able_getByOrderid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target order's " + } + ], + "output": { + "type": "boolean" + }, + "description": "Check publishable.\n\nTest whether the {@link IShoppingOrder order} is publishable or not.\n\nIf the order has not been {@link IShoppingOrderPublish published} and\nnot deleted yet, then it is possible to publish the order. Even thouogh\ntarget {@link IShoppingSale sale} is suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, it is still possible\nto publish because the order already has been applied." + }, + { + "method": "post", + "path": "/shoppings/customers/orders/{orderId}/publish", + "name": "shoppings_customers_orders_publish_postByOrderid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target order's " + }, + { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "cash" + ] + }, + "address": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number to contact", + "description": "Mobile number to contact." + }, + "name": { + "type": "string", + "title": "Representative name of the address", + "description": "Representative name of the address.\n\nSometimes be receiver's name, and sometimes be place name." + }, + "country": { + "type": "string", + "title": "Country name", + "description": "Country name." + }, + "province": { + "type": "string", + "title": "Province name", + "description": "Province name." + }, + "city": { + "type": "string", + "title": "City name", + "description": "City name." + }, + "department": { + "type": "string", + "title": "Department name", + "description": "Department name." + }, + "possession": { + "type": "string", + "title": "Detailed address containing street name, building number, and room number", + "description": "Detailed address containing street name, building number, and room number." + }, + "zip_code": { + "type": "string", + "title": "Zip code, or postal code", + "description": "Zip code, or postal code." + }, + "special_note": { + "type": "string", + "nullable": true, + "title": "Special description if required", + "description": "Special description if required." + } + }, + "required": [ + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ] + }, + "vendor": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "type", + "address", + "vendor", + "uid" + ] + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "zero" + ] + }, + "address": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number to contact", + "description": "Mobile number to contact." + }, + "name": { + "type": "string", + "title": "Representative name of the address", + "description": "Representative name of the address.\n\nSometimes be receiver's name, and sometimes be place name." + }, + "country": { + "type": "string", + "title": "Country name", + "description": "Country name." + }, + "province": { + "type": "string", + "title": "Province name", + "description": "Province name." + }, + "city": { + "type": "string", + "title": "City name", + "description": "City name." + }, + "department": { + "type": "string", + "title": "Department name", + "description": "Department name." + }, + "possession": { + "type": "string", + "title": "Detailed address containing street name, building number, and room number", + "description": "Detailed address containing street name, building number, and room number." + }, + "zip_code": { + "type": "string", + "title": "Zip code, or postal code", + "description": "Zip code, or postal code." + }, + "special_note": { + "type": "string", + "nullable": true, + "title": "Special description if required", + "description": "Special description if required." + } + }, + "required": [ + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ] + } + }, + "required": [ + "type", + "address" + ] + } + ] + } + ], + "output": { + "type": "object", + "properties": { + "deliveries": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "journeys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deletion time of the record", + "description": "Deletion time of the record." + }, + "type": { + "type": "string", + "enum": [ + "preparing", + "manufacturing", + "shipping", + "delivering" + ] + }, + "title": { + "type": "string", + "nullable": true, + "title": "Title of journey", + "description": "Title of journey." + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description of journey", + "description": "Description of journey." + }, + "started_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Start time of the journey", + "description": "Start time of the journey." + }, + "completed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "id", + "created_at", + "deleted_at", + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "Journey of delivery.\n\n`IShoppingDeliveryJourney` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing each journey of the delivery. For reference, the word journey\nmeans each step of the delivery process, such as preparing, shipping, and\ndelivering {@link IShoppingOrderGood goods} to the\n{@link IShoppingCustomer customer}." + }, + "title": "List of journeys of the delivery", + "description": "List of journeys of the delivery." + }, + "pieces": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "publish_id": { + "type": "string", + "format": "uuid", + "title": "Target order's {@link IShoppingOrderPublish.id }", + "description": "Target order's {@link IShoppingOrderPublish.id }." + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "Target good's {@link IShoppingOrderGood.id }", + "description": "Target good's {@link IShoppingOrderGood.id }." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "Target stock's {@link IShoppingSaleUnitStock.id }", + "description": "Target stock's {@link IShoppingSaleUnitStock.id }." + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "Quantity of the stock", + "description": "Quantity of the stock.\n\nIt can be precision value to express splitted shipping." + } + }, + "required": [ + "id", + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "Which stocks are delivered.\n\n`IShoppingDeliveryPiece` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing how much quantity is delivered for each\n{@link IShoppingSaleUnitStock stock} in {@link IShoppingOrder }.\n\nFor reference, as an order can be delivered in multiple times due to volume\nor weight problem, it is possible to have multiple `IShoppingDeliveryPiece`\nrecords for a single stock." + }, + "minItems": 1, + "title": "List of pieces of the delivery", + "description": "List of pieces of the delivery." + }, + "shippers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "company": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "id", + "created_at", + "company", + "name", + "mobile" + ] + }, + "title": "List of shippers of the delivery", + "description": "List of shippers of the delivery." + }, + "state": { + "type": "string", + "enum": [ + "none", + "underway", + "preparing", + "manufacturing", + "shipping", + "delivering", + "arrived" + ], + "description": "State of delivery\n\n- `none`: No delivery or journey record\n- `underway`: Some pieces are over preparing, but others are not\n- `preparing`: At least preparing\n- `manufacturing`: At least manufacturing\n- `shipping`: At least shipping\n- `delivering`: At least delivering\n- `arrived`: Every pieces are arrived" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "id", + "seller", + "journeys", + "pieces", + "shippers", + "state", + "created_at" + ], + "description": "Delivery information.\n\nWhen delivering {@link IShoppingOrderGood goods} to\n{@link IShoppingCustomer customer}, {@link IShoppingSeller seller} can deliver\nmultiple {@link IShoppingSaleUnitStock stocks}, goods at once. Also, it is\npossible to deliver a stock or good in multiple times due to physical restriction\nlike volume or weight problem.\n\nAs you can see from above, the relationship between delivery with\n{@link IShoppingOrder order} (or {@link IShoppingOrderGood good}) is not 1: 1 or\nN: 1, but M: N. Entity `IShoppingDelivery` has been designed to represent such\nrelationship, by referencing target stocks or goods through subsidiary entity\n{@link IShoppingDeliveryPiece }.\n\nAlso, delivery does not end with only one step. It has multiple processes like\nmanufacturing, planning, shipping and delivering. Those steps are represented by\nanother subsidiary entity {@link IShoppingDeliveryJourney }." + }, + "title": "List of deliveries", + "description": "List of deliveries.\n\nAn {@link IShoppingOrder order} can be delivered in multiple times.\nOf course, the opposite case is also possible, that a\n{@link IShoppingDelivery delivery} can be composed of multiple orders." + }, + "state": { + "type": "string", + "enum": [ + "none", + "underway", + "preparing", + "manufacturing", + "shipping", + "delivering", + "arrived" + ], + "description": "State of delivery\n\n- `none`: No delivery or journey record\n- `underway`: Some pieces are over preparing, but others are not\n- `preparing`: At least preparing\n- `manufacturing`: At least manufacturing\n- `shipping`: At least shipping\n- `delivering`: At least delivering\n- `arrived`: Every pieces are arrived" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + }, + "paid_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Time when the order was paid", + "description": "Time when the order was paid." + }, + "cancelled_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Time when the payment was cancelled", + "description": "Time when the payment was cancelled." + }, + "address": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number to contact", + "description": "Mobile number to contact." + }, + "name": { + "type": "string", + "title": "Representative name of the address", + "description": "Representative name of the address.\n\nSometimes be receiver's name, and sometimes be place name." + }, + "country": { + "type": "string", + "title": "Country name", + "description": "Country name." + }, + "province": { + "type": "string", + "title": "Province name", + "description": "Province name." + }, + "city": { + "type": "string", + "title": "City name", + "description": "City name." + }, + "department": { + "type": "string", + "title": "Department name", + "description": "Department name." + }, + "possession": { + "type": "string", + "title": "Detailed address containing street name, building number, and room number", + "description": "Detailed address containing street name, building number, and room number." + }, + "zip_code": { + "type": "string", + "title": "Zip code, or postal code", + "description": "Zip code, or postal code." + }, + "special_note": { + "type": "string", + "nullable": true, + "title": "Special description if required", + "description": "Special description if required." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ], + "description": "The address information." + } + }, + "required": [ + "deliveries", + "state", + "id", + "created_at", + "paid_at", + "cancelled_at", + "address" + ], + "description": "Order completion and payment information.\n\n`IShoppingOrderPublish` is an entity that embodies the series of processes\nin which a {@link IShoppingCustomer customer} pays for his or her\n{@link IShoppingOrder order}, thereby completing the order. And only after\nthe order is {@link paid_at completed}, can the {@link IShoppingSeller seller}\nrecognize that the customer has purchased his product.\n\nBy the way, please note that just because the `IShoppingOrderPublish` record\nexists, it does not mean that the payment has been completed. Of course, with\n\"credit cards\" and \"Google Pay\", payment application and payment occur at the\nsame time. However, there are some cases where payment is made after the\npayment application, such as \"bank transfer\" or \"virtual account payment\".\nTherefore, to see the completion of payment, be sure to check the\n{@link paid_at } property.\n\nIn addition, even after payment has been made, there may be cases where it is\nsuddenly cancelled, so please be aware of this as well." + }, + "description": "Publish an order.\n\n{@link IShoppingOrderPublish Publish} an {@link IShoppingOrder order} that\nhas been applied by the {@link IShoppingCustomer } with\n{@link IShoppingAddress address} to delivery and payment information gotten\nfrom the payment vendor system.\n\nIf the order has been discounted for entire order price, then no need\nto send payment vendor info. Instead, only address info is required.\n\nAlso, the payment time can be different with the publish time. For example,\nif the payment method is manual bank account transfer, then the payment\nwould be delayed until the customer actually transfer the money. In that\ncase, {@link IShoppingOrderPublish.paid_at } would be `null` value, so\nthat you have to check it after calling this publish function." + }, + { + "method": "delete", + "path": "/shoppings/customers/orders/{orderId}/publish", + "name": "shoppings_customers_orders_publish_eraseByOrderid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target order's " + } + ], + "description": "Cancel the publish (payment).\n\nCancel payment of an {@link IShoppingOrder order} that has been\n{@link IShoppingOrderPublish published}.\n\nIf target publish's payment method is manual bank account transfer,\nthen it would be cancelled directly. If not, then payment cancel\nrequest would be sent to the payment vendor system." + }, + { + "method": "post", + "path": "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments", + "name": "shoppings_customers_sales_questions_comments_postBySaleidAndInquiryid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + }, + { + "method": "patch", + "path": "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments", + "name": "shoppings_customers_sales_questions_comments_patchBySaleidAndInquiryid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the comments with pagination and searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + { + "method": "get", + "path": "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments/{id}", + "name": "shoppings_customers_sales_questions_comments_getBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + { + "method": "put", + "path": "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments/{id}", + "name": "shoppings_customers_sales_questions_comments_putBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot content of the comment." + }, + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "post", + "path": "/shoppings/customers/sales/{saleId}/questions", + "name": "shoppings_customers_sales_questions_postBySaleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "secret", + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the question." + } + ], + "output": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "type": { + "type": "string", + "enum": [ + "question" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "secret", + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Question about sale snapshot.\n\n`IShoppingSaleQuestion` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} wants to ask something\nabout a {@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at\nthe time) registered by the {@link IShoppingSeller seller}.\n\nAnd, like most shopping malls, `IShoppingSaleQuestion` also provides\na {@link secret } attribute, allowing you to create a \"secret message\" that can\nonly be viewed by the seller and the customer who wrote the question." + }, + "description": "Write a question article.\n\nWhen a {@link IShoppingCustomer customer} wants to ask something about\na specific {@link IShoppingSale sale}, he/she can ask it by writing a\nnew {@link IShoppingSaleQuestion question article}.\n\nIf the customer does not want to reveal his/her identify and question,\nhe/she can write the question as a secret article. In that case, only\nthe customer and the related {@link IShoppingSeller seller} can see\nthe {@link at detailed content}. Also, such secret question's title and\nwriter name would be masked with `*` characters in the\n{@link index pagiation API}." + }, + { + "method": "patch", + "path": "/shoppings/customers/sales/{saleId}/questions", + "name": "shoppings_customers_sales_questions_patchBySaleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the question." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/customers/sales/{saleId}/questions/{id}", + "name": "shoppings_customers_sales_questions_getBySaleidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target question's " + } + ], + "output": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "type": { + "type": "string", + "enum": [ + "question" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "secret", + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Question about sale snapshot.\n\n`IShoppingSaleQuestion` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} wants to ask something\nabout a {@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at\nthe time) registered by the {@link IShoppingSeller seller}.\n\nAnd, like most shopping malls, `IShoppingSaleQuestion` also provides\na {@link secret } attribute, allowing you to create a \"secret message\" that can\nonly be viewed by the seller and the customer who wrote the question." + }, + "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret }\nvalue is `false`." + }, + { + "method": "post", + "path": "/shoppings/customers/sales/{saleId}/questions/{id}", + "name": "shoppings_customers_sales_questions_postBySaleidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target question's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the article." + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "description": "Update a question.\n\nUpdate a {@link IShoppingSaleQuestion question}'s content.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleQuestion.ISnapshot snapshot}. And this is made public\nto everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "patch", + "path": "/shoppings/customers/sales/{saleId}/questions/abridges", + "name": "shoppings_customers_sales_questions_abridges_patchBySaleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the question." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at } function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + }, + { + "method": "post", + "path": "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments", + "name": "shoppings_customers_sales_reviews_comments_postBySaleidAndInquiryid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + }, + { + "method": "patch", + "path": "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments", + "name": "shoppings_customers_sales_reviews_comments_patchBySaleidAndInquiryid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the comments with pagination and searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + { + "method": "get", + "path": "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments/{id}", + "name": "shoppings_customers_sales_reviews_comments_getBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + { + "method": "put", + "path": "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments/{id}", + "name": "shoppings_customers_sales_reviews_comments_putBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot content of the comment." + }, + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "post", + "path": "/shoppings/customers/sales/{saleId}/reviews", + "name": "shoppings_customers_sales_reviews_postBySaleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "object", + "properties": { + "good_id": { + "type": "string", + "format": "uuid", + "title": "Target good's {@link IShoppingOrderGood.id }", + "description": "Target good's {@link IShoppingOrderGood.id }." + }, + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "good_id", + "score", + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the review." + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "review" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot content of the review article." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Reviews for sale snapshots.\n\n`IShoppingSaleReview` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} purchases a\n{@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at the time)\nregistered by the {@link IShoppingSeller seller} as a product and leaves a\nreview and rating for it.\n\nFor reference, `IShoppingSaleReview` and\n{@link IShoppingOrderGod shopping_order_goods} have a logarithmic relationship\nof N: 1, but this does not mean that customers can continue to write reviews\nfor the same product indefinitely. Wouldn't there be restrictions, such as\nif you write a review once, you can write an additional review a month later?" + }, + "description": "Write a review article.\n\nWhen a {@link IShoppingCustomer customer} has purchased a specific\n{@link IShoppingSale sale} and get {@link IShoppingDelivery delivered} it,\nhe/she can write a {@link IShoppingSaleReview review} article about the sale.\n\nIf try to write a review article without purchasing or the delivery has not\nbeen completed, 428 unprocessable entity error would be thrown. Also, the\ncustomer can write multiple review articles per an order, but the next\narticle can be written after 2 weeks from the previous article. If not,\n428 unprocessable entity error would be thrown, either." + }, + { + "method": "patch", + "path": "/shoppings/customers/sales/{saleId}/reviews", + "name": "shoppings_customers_sales_reviews_patchBySaleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at", + "-score", + "+score" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the review." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/customers/sales/{saleId}/reviews/{id}", + "name": "shoppings_customers_sales_reviews_getBySaleidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target review's " + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "review" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot content of the review article." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Reviews for sale snapshots.\n\n`IShoppingSaleReview` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} purchases a\n{@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at the time)\nregistered by the {@link IShoppingSeller seller} as a product and leaves a\nreview and rating for it.\n\nFor reference, `IShoppingSaleReview` and\n{@link IShoppingOrderGod shopping_order_goods} have a logarithmic relationship\nof N: 1, but this does not mean that customers can continue to write reviews\nfor the same product indefinitely. Wouldn't there be restrictions, such as\nif you write a review once, you can write an additional review a month later?" + }, + "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales." + }, + { + "method": "post", + "path": "/shoppings/customers/sales/{saleId}/reviews/{id}", + "name": "shoppings_customers_sales_reviews_postBySaleidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target review's " + }, + { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "format", + "title", + "body", + "files" + ], + "description": "Updating information of the review." + } + ], + "output": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot content of the review article." + }, + "description": "Update a review.\n\nUpdadte a {@link IShoppingSaleReview review}'s content and score.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleReview.ISnapshot snapshot}. And this is made public\nto everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "patch", + "path": "/shoppings/customers/sales/{saleId}/reviews/abridges", + "name": "shoppings_customers_sales_reviews_abridges_patchBySaleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at", + "-score", + "+score" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the review." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at } function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + }, + { + "method": "patch", + "path": "/shoppings/customers/systematic/channels", + "name": "shoppings_customers_systematic_channels_patch", + "parameters": [ + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-channel.code", + "-channel.name", + "-channel.created_at", + "+channel.code", + "+channel.name", + "+channel.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the channels with pagination and searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + }, + { + "method": "patch", + "path": "/shoppings/customers/systematic/sections", + "name": "shoppings_customers_systematic_sections_patch", + "parameters": [ + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-section.code", + "-section.name", + "-section.created_at", + "+section.code", + "+section.name", + "+section.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the sections with pagination and searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/customers/systematic/sections/{id}", + "name": "shoppings_customers_systematic_sections_getById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target section's " + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." + }, + { + "method": "get", + "path": "/shoppings/customers/systematic/sections/{code}/get", + "name": "shoppings_customers_systematic_sections_get_getByCode", + "parameters": [ + { + "type": "string", + "description": "Target section's " + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code." + }, + { + "method": "get", + "path": "/shoppings/sellers/authenticate", + "name": "shoppings_sellers_authenticate_get", + "parameters": [], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "description": "Get seller information.\n\nGet {@link IShoppingSeller.IInvert seller} information of\ncurrent {@link IShoppingCustomer customer}.\n\nIf current {@link IShoppingMember member} is not an seller,\nit throws 403 forbidden exception." + }, + { + "method": "post", + "path": "/shoppings/sellers/authenticate", + "name": "shoppings_sellers_authenticate_post", + "parameters": [ + { + "type": "object", + "properties": {} + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "description": "Join as an seller.\n\nJoin as an seller with {@link IShoppingSeller.IJoin joining info}.\n\nThis method is allowed only when the {@link IShoppingCustomer customer} already\nhas joined the {@link IShoppingMember membership}. IF not, he (she) must\naccomplish it before. If not, 403 forbidden exception would be thrown." + }, + { + "method": "put", + "path": "/shoppings/sellers/authenticate/login", + "name": "shoppings_sellers_authenticate_login_put", + "parameters": [ + { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "title": "Email address of member", + "description": "Email address of member.\n\nIf the member has multiple email addresses, just use one of them." + }, + "password": { + "type": "string", + "title": "Password of the member account", + "description": "Password of the member account." + } + }, + "required": [ + "email", + "password" + ], + "description": "Login request info." + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "description": "Login as an seller.\n\nLogin as an seller with {@link IShoppingSeller.ILogin login info}.\n\nThis method has exactly same effect with\n{@link ShoppingApi.functional.customers.authenticate.login } function, but\nreturned type is a llttle different. The similar function returns\n{@link IShoppingCustomer } type that starting from the customer information, so\nthat you have to access to the seller info through\n`customer.member.seller`. In contrast with that, this method returns\n{@link IShoppingSeller.IInvert } type that starting from the seller\ninfo, so that can access to the customer info through `seller.customer`.\n\nOf course, to use this function, you had to {@link join } as an seller\nbefore. If not, 403 forbidden exception would be thrown," + }, + { + "method": "post", + "path": "/shoppings/sellers/deliveries", + "name": "shoppings_sellers_deliveries_post", + "parameters": [ + { + "type": "object", + "properties": { + "pieces": { + "type": "array", + "items": { + "type": "object", + "properties": { + "publish_id": { + "type": "string", + "format": "uuid", + "title": "Target order's {@link IShoppingOrderPublish.id }", + "description": "Target order's {@link IShoppingOrderPublish.id }." + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "Target good's {@link IShoppingOrderGood.id }", + "description": "Target good's {@link IShoppingOrderGood.id }." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "Target stock's {@link IShoppingSaleUnitStock.id }", + "description": "Target stock's {@link IShoppingSaleUnitStock.id }." + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "Quantity of the stock", + "description": "Quantity of the stock.\n\nIt can be precision value to express splitted shipping." + } + }, + "required": [ + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "Creation information of the delivery piece." + }, + "minItems": 1, + "title": "List of pieces of the delivery", + "description": "List of pieces of the delivery." + }, + "journeys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "preparing", + "manufacturing", + "shipping", + "delivering" + ], + "title": "Type of journey", + "description": "Type of journey.\n\n- preparing\n- manufacturing\n- shipping\n- delivering" + }, + "title": { + "type": "string", + "nullable": true, + "title": "Title of journey", + "description": "Title of journey." + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description of journey", + "description": "Description of journey." + }, + "started_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Start time of the journey", + "description": "Start time of the journey." + }, + "completed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "Creation information of the delivery journey." + }, + "title": "List of journeys of the delivery", + "description": "List of journeys of the delivery.\n\nThis is initial data, and it is also possible to accumulate journey data\nafter the delivery creation." + }, + "shippers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "company": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "company", + "name", + "mobile" + ] + }, + "title": "List of shippers of the delivery", + "description": "List of shippers of the delivery." + } + }, + "required": [ + "pieces", + "journeys", + "shippers" + ], + "description": "Creation information of the delivery." + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "journeys": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deletion time of the record", + "description": "Deletion time of the record." + }, + "type": { + "type": "string", + "enum": [ + "preparing", + "manufacturing", + "shipping", + "delivering" + ] + }, + "title": { + "type": "string", + "nullable": true, + "title": "Title of journey", + "description": "Title of journey." + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description of journey", + "description": "Description of journey." + }, + "started_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Start time of the journey", + "description": "Start time of the journey." + }, + "completed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "id", + "created_at", + "deleted_at", + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "Journey of delivery.\n\n`IShoppingDeliveryJourney` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing each journey of the delivery. For reference, the word journey\nmeans each step of the delivery process, such as preparing, shipping, and\ndelivering {@link IShoppingOrderGood goods} to the\n{@link IShoppingCustomer customer}." + }, + "title": "List of journeys of the delivery", + "description": "List of journeys of the delivery." + }, + "pieces": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "publish_id": { + "type": "string", + "format": "uuid", + "title": "Target order's {@link IShoppingOrderPublish.id }", + "description": "Target order's {@link IShoppingOrderPublish.id }." + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "Target good's {@link IShoppingOrderGood.id }", + "description": "Target good's {@link IShoppingOrderGood.id }." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "Target stock's {@link IShoppingSaleUnitStock.id }", + "description": "Target stock's {@link IShoppingSaleUnitStock.id }." + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "Quantity of the stock", + "description": "Quantity of the stock.\n\nIt can be precision value to express splitted shipping." + } + }, + "required": [ + "id", + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "Which stocks are delivered.\n\n`IShoppingDeliveryPiece` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing how much quantity is delivered for each\n{@link IShoppingSaleUnitStock stock} in {@link IShoppingOrder }.\n\nFor reference, as an order can be delivered in multiple times due to volume\nor weight problem, it is possible to have multiple `IShoppingDeliveryPiece`\nrecords for a single stock." + }, + "minItems": 1, + "title": "List of pieces of the delivery", + "description": "List of pieces of the delivery." + }, + "shippers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "company": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "id", + "created_at", + "company", + "name", + "mobile" + ] + }, + "title": "List of shippers of the delivery", + "description": "List of shippers of the delivery." + }, + "state": { + "type": "string", + "enum": [ + "none", + "underway", + "preparing", + "manufacturing", + "shipping", + "delivering", + "arrived" + ], + "description": "State of delivery\n\n- `none`: No delivery or journey record\n- `underway`: Some pieces are over preparing, but others are not\n- `preparing`: At least preparing\n- `manufacturing`: At least manufacturing\n- `shipping`: At least shipping\n- `delivering`: At least delivering\n- `arrived`: Every pieces are arrived" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "id", + "seller", + "journeys", + "pieces", + "shippers", + "state", + "created_at" + ], + "description": "Delivery information.\n\nWhen delivering {@link IShoppingOrderGood goods} to\n{@link IShoppingCustomer customer}, {@link IShoppingSeller seller} can deliver\nmultiple {@link IShoppingSaleUnitStock stocks}, goods at once. Also, it is\npossible to deliver a stock or good in multiple times due to physical restriction\nlike volume or weight problem.\n\nAs you can see from above, the relationship between delivery with\n{@link IShoppingOrder order} (or {@link IShoppingOrderGood good}) is not 1: 1 or\nN: 1, but M: N. Entity `IShoppingDelivery` has been designed to represent such\nrelationship, by referencing target stocks or goods through subsidiary entity\n{@link IShoppingDeliveryPiece }.\n\nAlso, delivery does not end with only one step. It has multiple processes like\nmanufacturing, planning, shipping and delivering. Those steps are represented by\nanother subsidiary entity {@link IShoppingDeliveryJourney }." + }, + "description": "Create a delivery.\n\nCreate a {@link IShoppingDelivery delivery} record targetting\n{@link IShoppingOrder orders}, their {@link IShoppingOrderGood goods} and\n{@link IShoppingSaleUnitStock stocks} ({@link IShoppingDeliveryPiece }) with\n{@link IShoppingDeliveryJourney journeys} and\n{@link IShoppingDeliveryShipper shippers} info.\n\nNote that, composition of the {@link IShoppingDeliveryPiece } must not over\nthe required. To identify which pieces are required, recommend to call\nthe {@link incompletes } function with target orders'\n{@link IShoppingOrderPublish.id }s before calling this one." + }, + { + "method": "patch", + "path": "/shoppings/sellers/deliveries/incompletes", + "name": "shoppings_sellers_deliveries_incompletes_patch", + "parameters": [ + { + "type": "object", + "properties": { + "publish_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "publish_ids" + ] + } + ], + "output": { + "type": "array", + "items": { + "type": "object", + "properties": { + "publish_id": { + "type": "string", + "format": "uuid", + "title": "Target order's {@link IShoppingOrderPublish.id }", + "description": "Target order's {@link IShoppingOrderPublish.id }." + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "Target good's {@link IShoppingOrderGood.id }", + "description": "Target good's {@link IShoppingOrderGood.id }." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "Target stock's {@link IShoppingSaleUnitStock.id }", + "description": "Target stock's {@link IShoppingSaleUnitStock.id }." + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "Quantity of the stock", + "description": "Quantity of the stock.\n\nIt can be precision value to express splitted shipping." + } + }, + "required": [ + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "Creation information of the delivery piece." + } + }, + "description": "Get list of incomplete pieces.\n\nGet list of {@link IShoppingDeliveryPiece incomplete pieces} of target\norders' {@link IShoppingOrderPublish.id }s.\n\nIf you specify target orders' publish IDs, then this function returns\nincompleted pieces of the orders with computation as an Array of\n{@link IShoppingDeliveryPiece.ICreate } type.\n\nYou can utillize the result to make a huge {@link IShoppingDelivery delivery}\nfor integrated delivering, and also possible to make multiple deliveries for\nsplitted delivering." + }, + { + "method": "post", + "path": "/shoppings/sellers/deliveries/{deliveryId}/journeys", + "name": "shoppings_sellers_deliveries_journeys_postByDeliveryid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged delivery's " + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "preparing", + "manufacturing", + "shipping", + "delivering" + ], + "title": "Type of journey", + "description": "Type of journey.\n\n- preparing\n- manufacturing\n- shipping\n- delivering" + }, + "title": { + "type": "string", + "nullable": true, + "title": "Title of journey", + "description": "Title of journey." + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description of journey", + "description": "Description of journey." + }, + "started_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Start time of the journey", + "description": "Start time of the journey." + }, + "completed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "Creation information of the delivery journey." + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + }, + "deleted_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Deletion time of the record", + "description": "Deletion time of the record." + }, + "type": { + "type": "string", + "enum": [ + "preparing", + "manufacturing", + "shipping", + "delivering" + ] + }, + "title": { + "type": "string", + "nullable": true, + "title": "Title of journey", + "description": "Title of journey." + }, + "description": { + "type": "string", + "nullable": true, + "title": "Description of journey", + "description": "Description of journey." + }, + "started_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Start time of the journey", + "description": "Start time of the journey." + }, + "completed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "id", + "created_at", + "deleted_at", + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "Journey of delivery.\n\n`IShoppingDeliveryJourney` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing each journey of the delivery. For reference, the word journey\nmeans each step of the delivery process, such as preparing, shipping, and\ndelivering {@link IShoppingOrderGood goods} to the\n{@link IShoppingCustomer customer}." + }, + "description": "Create a new journey.\n\nCreate a new {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}.\n\nThis action may change the related {@link IShoppingOrderGood.state }.\nAlso, if the target journey's type is \"delivering\", whether the property\n{@link IShoppingDeliveryJourney.completed_at } is null or not affects to\nthe related goods' states. If the property is not null, the state becomes\n\"arrived\". Otherwise, the state becomes \"delivering\"." + }, + { + "method": "put", + "path": "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}/complete", + "name": "shoppings_sellers_deliveries_journeys_complete_putByDeliveryidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged delivery's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target journey's " + }, + { + "type": "object", + "properties": { + "completed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "completed_at" + ], + "description": "Completion information of the delivery journey." + } + ], + "description": "Complete a journey.\n\nComplete a {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}. In other words, fills the\n{@link IShoppingDeliveryJourney.completed_at } property with current time.\n\nIf the target journey's type is \"delivering\", this action may change\nthe related {@link IShoppingOrderGood.state goods' states} to be \"arrived\"." + }, + { + "method": "delete", + "path": "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}", + "name": "shoppings_sellers_deliveries_journeys_eraseByDeliveryidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged delivery's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target journey's " + } + ], + "description": "Erase a journey.\n\nErase a {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}.\n\nIf erasing journey is the last one of the belonged delivery, this action\nmay change the related {@link IShoppingOrderGood.state }. By erasing the last\njourney, the state rolls back to the previous." + }, + { + "method": "post", + "path": "/shoppings/sellers/deliveries/{deliveryId}/shippers", + "name": "shoppings_sellers_deliveries_shippers_postByDeliveryid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged delivery's " + }, + { + "type": "object", + "properties": { + "company": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "company", + "name", + "mobile" + ] + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "company": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "id", + "created_at", + "company", + "name", + "mobile" + ] + }, + "description": "Create a new shipper.\n\nCreate a new {@link IShoppingDeliveryShipper shipper} of the\n{@link IShoppingDelivery delivery}.\n\nThis action does not affect to the related {@link IShoppingOrder orders} or\n{@link IShoppingOrderGood goods} like {@link IShoppingDeliveryJourney }\nor {@link IShoppingDeliveryPiece } case, but just informs to the\n{@link IShoppingCustomer customer}." + }, + { + "method": "delete", + "path": "/shoppings/sellers/coupons/{id}", + "name": "shoppings_sellers_coupons_eraseById", + "parameters": [ + { + "type": "string", + "description": "Target coupon's " + } + ], + "description": "Erase a coupon.\n\nErase a {@link IShoppingCoupon coupon} with given ID.\n\nFor reference, if there're some {@link IShoppingCouponTicket tickets}\nwhich are already issued from the target coupon, they would not be affected.\nThose tickets are still valid until their expration time." + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{id}/open", + "name": "shoppings_sellers_sales_open_putById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target sale's " + }, + { + "type": "object", + "properties": { + "opened_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Closing time of the sale", + "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." + } + }, + "required": [ + "opened_at", + "closed_at" + ], + "description": "Update opening time information of sale." + } + ], + "description": "Change opening and closing time of a sale.\n\nUpdate a {@link IShoppingSale sale}'s opening and closing time.\n\nBy the way, if the sale still be opened or closed, it is not possible to\nchange the opening time. In contrary, if the sale already had been opened\nbut still not closed, it is possible to change the closing time.\n\nOf course, if closing time is less than opening time or not,\n428 unprocessable entity error would be thrown." + }, + { + "method": "post", + "path": "/shoppings/sellers/sales/{id}/replica", + "name": "shoppings_sellers_sales_replica_postById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target sale's " + } + ], + "output": { + "type": "object", + "properties": { + "section_code": { + "type": "string", + "title": "Belonged section's {@link IShoppingSection.code }", + "description": "Belonged section's {@link IShoppingSection.code }." + }, + "status": { + "type": "string", + "enum": [ + "paused", + "suspended" + ], + "nullable": true, + "title": "Initial status of the sale", + "description": "Initial status of the sale.\n\n`null` or `undefined`: No restriction\n`paused`: Starts with {@link ITimestamps.paused_at paused} status\n`suspended`: Starts with {@link ITimestamps.suspended_at suspended} status" + }, + "opened_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Closing time of the sale", + "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." + }, + "content": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string" + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + } + }, + "thumbnails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + } + } + }, + "required": [ + "title", + "format", + "body", + "files", + "thumbnails" + ] + }, + "channels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "Target channel's {@link IShoppingChannel.code }", + "description": "Target channel's {@link IShoppingChannel.code }." + }, + "category_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "List of target categories' {@link IShoppingChannelCategory.id }s", + "description": "List of target categories' {@link IShoppingChannelCategory.id }s.\n\nIf empty, it means all categories of the channel is listing the sale." + } + }, + "required": [ + "code", + "category_ids" + ], + "description": "Creation information of the target channel (and categories) of sale to sell." + } + }, + "units": { + "type": "array", + "items": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "string", + "number", + "boolean" + ], + "title": "Type of descriptive option", + "description": "Type of descriptive option.\n\nWhich typed value should be written when purchasing." + }, + "name": { + "type": "string", + "title": "Readable name of the option", + "description": "Readable name of the option." + } + }, + "required": [ + "type", + "name" + ], + "description": "Creation information of the descriptive option." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "select" + ], + "title": "Discriminant for the type of selectable option", + "description": "Discriminant for the type of selectable option." + }, + "name": { + "type": "string", + "title": "Represents the name of the option", + "description": "Represents the name of the option." + }, + "variable": { + "type": "boolean", + "title": "Whether the option is variable or not", + "description": "Whether the option is variable or not.\n\nWhen type of current option is \"select\", this attribute means whether\nselecting different candidate value affects the final stock or not." + }, + "candidates": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Represents the name of the candidate value", + "description": "Represents the name of the candidate value." + } + }, + "required": [ + "name" + ], + "description": "Creation information of the candidate value." + }, + "minItems": 1, + "title": "List of candidate values", + "description": "List of candidate values." + } + }, + "required": [ + "type", + "name", + "variable", + "candidates" + ], + "description": "Creation information of the selectable option." + } + ] + }, + "title": "List of options", + "description": "List of options." + }, + "stocks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Representative name of the stock", + "description": "Representative name of the stock." + }, + "price": { + "type": "object", + "properties": { + "nominal": { + "type": "number", + "minimum": 0, + "title": "Nominal price", + "description": "Nominal price.\n\nThis is not {@link real real price} to pay, but just a nominal price to show.\nIf this value is greater than the {@link real real price}, it would be shown\nlike {@link IShoppingSeller seller} is giving a discount." + }, + "real": { + "type": "number", + "minimum": 0, + "title": "Real price to pay", + "description": "Real price to pay." + } + }, + "required": [ + "nominal", + "real" + ], + "description": "Shopping price interface." + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "Initial inventory quantity", + "description": "Initial inventory quantity." + }, + "choices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "option_index": { + "type": "integer", + "description": "Target option's index number in\n{@link IShoppingSaleUnit.ICreate.options }." + }, + "candidate_index": { + "type": "integer", + "description": "Target candidate's index number in\n{@link IShoppingSaleUnitSelectableOption.ICreate.candidates }." + } + }, + "required": [ + "option_index", + "candidate_index" + ], + "description": "Creation information of stock choice." + }, + "title": "List of choices", + "description": "List of choices.\n\nWhich candidate values being chosen for each option." + } + }, + "required": [ + "name", + "price", + "quantity", + "choices" + ], + "description": "Creation information of the stock." + }, + "minItems": 1, + "title": "List of final stocks", + "description": "List of final stocks." + }, + "name": { + "type": "string", + "title": "Representative name of the unit", + "description": "Representative name of the unit." + }, + "primary": { + "type": "boolean", + "title": "Whether the unit is primary or not", + "description": "Whether the unit is primary or not.\n\nJust a labeling value." + }, + "required": { + "type": "boolean", + "title": "Whether the unit is required or not", + "description": "Whether the unit is required or not.\n\nWhen the unit is required, the customer must select the unit. If do not\nselect, customer can't buy it.\n\nFor example, if there's a sale \"Macbook Set\" and one of the unit is the\n\"Main Body\", is it possible to buy the \"Macbook Set\" without the\n\"Main Body\" unit? This property is for that case." + } + }, + "required": [ + "options", + "stocks", + "name", + "primary", + "required" + ], + "description": "Creation information of sale unit." + }, + "minItems": 1 + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "section_code", + "opened_at", + "closed_at", + "content", + "channels", + "units", + "tags" + ], + "description": "Creation information of sale." + }, + "description": "Get replica of a sale.\n\nGet a {@link IShoppingSale.ICreate } typed info of the target sale for\nreplication.\n\nIt would be useful for creating a new replication\n{@link IShoppingSale sale} with similar innformatiopn." + }, + { + "method": "delete", + "path": "/shoppings/sellers/sales/{id}/pause", + "name": "shoppings_sellers_sales_pause_eraseById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target sale's " + } + ], + "description": "Pause a sale.\n\nPause a {@link IShoppingSale sale} from {@link open opened} state.\nTherefore, the sale can not be operated again until it be\n{@link restore restored}. By the way, {@link IShoppingCustomer customer}\nstill can sale from the {@link index } and {@link at } API endpints, but\n\"paused\" label would be attached.\n\nAlso, customer no more can put into the shopping cart, either.\nEven the sale already had been put into the shopping cart, the\n{@link IShoppingCartCommodity commodity} will not be listed on the\nshopping cart. Also, it is not possible to appling an\n{@link IShoppingOrder order} with the paused sale's commodity, either.\n\nBy the way, if the sale already had been applied to an order, the order\ncan be {@link IShoppingOrderPublish published} and\n{@link IShoppingSeller seller} must {@link IShoppingDelivery deliver} the\ngood to the customer." + }, + { + "method": "delete", + "path": "/shoppings/sellers/sales/{id}/suspend", + "name": "shoppings_sellers_sales_suspend_eraseById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target sale's " + } + ], + "description": "Suspend a sale.\n\nSuspend a {@link IShoppingSale sale} from {@link open opened} state.\nTherefore, the sale can not be operated again until it be\n{@link restore restored} and {@link IShoppingCustomer customer} cannot\nsee the sale from the {@link index } and {@link at } API.\n\nAlso, customer no more can put into the shopping cart, either.\nEven the sale already had been put into the shopping cart, the\n{@link IShoppingCartCommodity commodity} will not be listed on the\nshopping cart. Also, it is not possible to appling an\n{@link IShoppingOrder order} with the suspended sale's commodity, either.\n\nBy the way, if the sale already had been applied to an order, the order\ncan be {@link IShoppingOrderPublish published} and\n{@link IShoppingSeller seller} must {@link IShoppingDelivery deliver} the\ngood to the customer." + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{id}/restore", + "name": "shoppings_sellers_sales_restore_putById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target sale's " + } + ], + "description": "Restore a sale\n\nRestore a {@link IShoppingSale sale} from {@link pause paused} or\n{@link suspend suspended} state\n\nTherefore the sale can be operated again if its\n{@link IShoppingSale.closed_at closing time} has not been reached.\nAlso, if a {@link IShoppingCustomer customer} had put the sale into the\nshopping cart when being paused or suspended, the\n{@link IShoppingCartCommodity commodity} will be listed again on the\nshopping cart." + }, + { + "method": "post", + "path": "/shoppings/sellers/sales/{saleId}/questions/{questionId}/answer", + "name": "shoppings_sellers_sales_questions_answer_postBySaleidAndQuestionid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target question's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the article." + } + ], + "output": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Answers to questions about sale snapshots.\n\n`IShoppingSaleInquiryAnswer` is an entity that embodies the official\nanswer written by the {@link IShoppingSeller seller} to the\n{@link IShoppingSaleInquiry inquiry} written by the\n{@link IShoppingCustomer customer}.\n\nOf course, in addition to writing an official response like this, it is\nalso possible for the seller to communicate with the inqjuiry written\ncustomer and multiple customers through\n{@link IShoppingSaleInquiryComment comments} in the attribution inquiry.\n\nFor refererence, it is not possible to write comments on this answer.\nEncourage people to write comments on the inquiry article. This is to\nprevent comments from being scattered in both inquiry and answer\narticles." + }, + "description": "Write an answer article.\n\nWrite a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry question article} written by a\n{@link IShoppingCustomer }.\n\nNote that, this is the formal answer that can be written only one per\na question article (but {@link update updatable}). Therefore, it needs to\nguide the {@link IShoppingSeller seller} to write it carefully.\n\nAlso, as seller can write {@link IShoppingSaleInquiryComment comments} to\nthe question article as many as he/she wants, it would be useful for\nadditional communication." + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{saleId}/questions/{questionId}/answer", + "name": "shoppings_sellers_sales_questions_answer_putBySaleidAndQuestionid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target question's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the article." + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ] + }, + "description": "Update an answer article.\n\nUpdate a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry question article} written by a\n{@link IShoppingCustomer }.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleInquiryAnswer.ISnapshot snapshot}. And this is made\npublic to everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "post", + "path": "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments", + "name": "shoppings_sellers_sales_questions_comments_postBySaleidAndInquiryid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments", + "name": "shoppings_sellers_sales_questions_comments_patchBySaleidAndInquiryid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the comments with pagination and searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + { + "method": "get", + "path": "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments/{id}", + "name": "shoppings_sellers_sales_questions_comments_getBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments/{id}", + "name": "shoppings_sellers_sales_questions_comments_putBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot content of the comment." + }, + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/questions", + "name": "shoppings_sellers_sales_questions_patchBySaleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the question." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/questions/abridges", + "name": "shoppings_sellers_sales_questions_abridges_patchBySaleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the question." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at } function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/sellers/sales/{saleId}/questions/{id}", + "name": "shoppings_sellers_sales_questions_getBySaleidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target question's " + } + ], + "output": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "type": { + "type": "string", + "enum": [ + "question" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "secret", + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Question about sale snapshot.\n\n`IShoppingSaleQuestion` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} wants to ask something\nabout a {@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at\nthe time) registered by the {@link IShoppingSeller seller}.\n\nAnd, like most shopping malls, `IShoppingSaleQuestion` also provides\na {@link secret } attribute, allowing you to create a \"secret message\" that can\nonly be viewed by the seller and the customer who wrote the question." + }, + "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret }\nvalue is `false`." + }, + { + "method": "post", + "path": "/shoppings/sellers/sales/{saleId}/reviews/{reviewId}/answer", + "name": "shoppings_sellers_sales_reviews_answer_postBySaleidAndReviewid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target review's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the article." + } + ], + "output": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Answers to questions about sale snapshots.\n\n`IShoppingSaleInquiryAnswer` is an entity that embodies the official\nanswer written by the {@link IShoppingSeller seller} to the\n{@link IShoppingSaleInquiry inquiry} written by the\n{@link IShoppingCustomer customer}.\n\nOf course, in addition to writing an official response like this, it is\nalso possible for the seller to communicate with the inqjuiry written\ncustomer and multiple customers through\n{@link IShoppingSaleInquiryComment comments} in the attribution inquiry.\n\nFor refererence, it is not possible to write comments on this answer.\nEncourage people to write comments on the inquiry article. This is to\nprevent comments from being scattered in both inquiry and answer\narticles." + }, + "description": "Write an answer article.\n\nWrite a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry review article} written by a\n{@link IShoppingCustomer }.\n\nNote that, this is the formal answer that can be written only one per\na review article (but {@link update updatable}). Therefore, it needs to\nguide the {@link IShoppingSeller seller} to write it carefully.\n\nAlso, as seller can write {@link IShoppingSaleInquiryComment comments} to\nthe review article as many as he/she wants, it would be useful for\nadditional communication." + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{saleId}/reviews/{reviewId}/answer", + "name": "shoppings_sellers_sales_reviews_answer_putBySaleidAndReviewid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target review's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the article." + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ] + }, + "description": "Update an answer article.\n\nUpdate a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry review article} written by a\n{@link IShoppingCustomer }.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a review articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleInquiryAnswer.ISnapshot snapshot}. And this is made\npublic to everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "post", + "path": "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments", + "name": "shoppings_sellers_sales_reviews_comments_postBySaleidAndInquiryid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments", + "name": "shoppings_sellers_sales_reviews_comments_patchBySaleidAndInquiryid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the comments with pagination and searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + { + "method": "get", + "path": "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments/{id}", + "name": "shoppings_sellers_sales_reviews_comments_getBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + } + ], + "output": { + "type": "object", + "properties": { + "writer": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "administrator" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "seller" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "customer": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + } + ] + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "type": "string", + "format": "uuid", + "nullable": true, + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments/{id}", + "name": "shoppings_sellers_sales_reviews_comments_putBySaleidAndInquiryidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged inquiry's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target inquiry comment's " + }, + { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot content of the comment." + }, + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/reviews", + "name": "shoppings_sellers_sales_reviews_patchBySaleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at", + "-score", + "+score" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the review." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/reviews/abridges", + "name": "shoppings_sellers_sales_reviews_abridges_patchBySaleid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "type": "boolean", + "nullable": true + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at", + "-nickname", + "-answered_at", + "-title", + "-updated_at", + "+nickname", + "+answered_at", + "+title", + "+updated_at", + "-score", + "+score" + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller.", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the review." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at } function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/sellers/sales/{saleId}/reviews/{id}", + "name": "shoppings_sellers_sales_reviews_getBySaleidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target review's " + } + ], + "output": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "review" + ], + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "customer" + ], + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "type": "object", + "properties": { + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be.", + "title": "Citizen information", + "nullable": true + }, + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\nIf the member also signed up as a seller.", + "title": "Seller information", + "nullable": true + }, + "administrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator information.\n\nIf the member also signed up as an administrator.", + "title": "Administrator information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Membership information.\n\nIf the customer has joined as a member.", + "title": "Membership information", + "nullable": true + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number.", + "title": "Citizen information", + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "external_user": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen activation info.", + "title": "Citizen activation info", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\nWhen the customer has come frome an external service.", + "title": "External user information", + "nullable": true + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "type": "string", + "format": "uri", + "nullable": true, + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "answer": { + "type": "object", + "properties": { + "seller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Formal answer for the inquiry by the seller.", + "title": "Formal answer for the inquiry by the seller", + "nullable": true + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot content of the review article." + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Reviews for sale snapshots.\n\n`IShoppingSaleReview` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} purchases a\n{@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at the time)\nregistered by the {@link IShoppingSeller seller} as a product and leaves a\nreview and rating for it.\n\nFor reference, `IShoppingSaleReview` and\n{@link IShoppingOrderGod shopping_order_goods} have a logarithmic relationship\nof N: 1, but this does not mean that customers can continue to write reviews\nfor the same product indefinitely. Wouldn't there be restrictions, such as\nif you write a review once, you can write an additional review a month later?" + }, + "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales." + }, + { + "method": "post", + "path": "/shoppings/sellers/sales/{saleId}/snapshots/{id}/replica", + "name": "shoppings_sellers_sales_snapshots_replica_postBySaleidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target snapshot's " + } + ], + "output": { + "type": "object", + "properties": { + "section_code": { + "type": "string", + "title": "Belonged section's {@link IShoppingSection.code }", + "description": "Belonged section's {@link IShoppingSection.code }." + }, + "status": { + "type": "string", + "enum": [ + "paused", + "suspended" + ], + "nullable": true, + "title": "Initial status of the sale", + "description": "Initial status of the sale.\n\n`null` or `undefined`: No restriction\n`paused`: Starts with {@link ITimestamps.paused_at paused} status\n`suspended`: Starts with {@link ITimestamps.suspended_at suspended} status" + }, + "opened_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "type": "string", + "format": "date-time", + "nullable": true, + "title": "Closing time of the sale", + "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." + }, + "content": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "format": { + "type": "string", + "enum": [ + "html", + "md", + "txt" + ] + }, + "body": { + "type": "string" + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + } + }, + "thumbnails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "nullable": true, + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + } + } + }, + "required": [ + "title", + "format", + "body", + "files", + "thumbnails" + ] + }, + "channels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "Target channel's {@link IShoppingChannel.code }", + "description": "Target channel's {@link IShoppingChannel.code }." + }, + "category_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "List of target categories' {@link IShoppingChannelCategory.id }s", + "description": "List of target categories' {@link IShoppingChannelCategory.id }s.\n\nIf empty, it means all categories of the channel is listing the sale." + } + }, + "required": [ + "code", + "category_ids" + ], + "description": "Creation information of the target channel (and categories) of sale to sell." + } + }, + "units": { + "type": "array", + "items": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "string", + "number", + "boolean" + ], + "title": "Type of descriptive option", + "description": "Type of descriptive option.\n\nWhich typed value should be written when purchasing." + }, + "name": { + "type": "string", + "title": "Readable name of the option", + "description": "Readable name of the option." + } + }, + "required": [ + "type", + "name" + ], + "description": "Creation information of the descriptive option." + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "select" + ], + "title": "Discriminant for the type of selectable option", + "description": "Discriminant for the type of selectable option." + }, + "name": { + "type": "string", + "title": "Represents the name of the option", + "description": "Represents the name of the option." + }, + "variable": { + "type": "boolean", + "title": "Whether the option is variable or not", + "description": "Whether the option is variable or not.\n\nWhen type of current option is \"select\", this attribute means whether\nselecting different candidate value affects the final stock or not." + }, + "candidates": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Represents the name of the candidate value", + "description": "Represents the name of the candidate value." + } + }, + "required": [ + "name" + ], + "description": "Creation information of the candidate value." + }, + "minItems": 1, + "title": "List of candidate values", + "description": "List of candidate values." + } + }, + "required": [ + "type", + "name", + "variable", + "candidates" + ], + "description": "Creation information of the selectable option." + } + ] + }, + "title": "List of options", + "description": "List of options." + }, + "stocks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Representative name of the stock", + "description": "Representative name of the stock." + }, + "price": { + "type": "object", + "properties": { + "nominal": { + "type": "number", + "minimum": 0, + "title": "Nominal price", + "description": "Nominal price.\n\nThis is not {@link real real price} to pay, but just a nominal price to show.\nIf this value is greater than the {@link real real price}, it would be shown\nlike {@link IShoppingSeller seller} is giving a discount." + }, + "real": { + "type": "number", + "minimum": 0, + "title": "Real price to pay", + "description": "Real price to pay." + } + }, + "required": [ + "nominal", + "real" + ], + "description": "Shopping price interface." + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "Initial inventory quantity", + "description": "Initial inventory quantity." + }, + "choices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "option_index": { + "type": "integer", + "description": "Target option's index number in\n{@link IShoppingSaleUnit.ICreate.options }." + }, + "candidate_index": { + "type": "integer", + "description": "Target candidate's index number in\n{@link IShoppingSaleUnitSelectableOption.ICreate.candidates }." + } + }, + "required": [ + "option_index", + "candidate_index" + ], + "description": "Creation information of stock choice." + }, + "title": "List of choices", + "description": "List of choices.\n\nWhich candidate values being chosen for each option." + } + }, + "required": [ + "name", + "price", + "quantity", + "choices" + ], + "description": "Creation information of the stock." + }, + "minItems": 1, + "title": "List of final stocks", + "description": "List of final stocks." + }, + "name": { + "type": "string", + "title": "Representative name of the unit", + "description": "Representative name of the unit." + }, + "primary": { + "type": "boolean", + "title": "Whether the unit is primary or not", + "description": "Whether the unit is primary or not.\n\nJust a labeling value." + }, + "required": { + "type": "boolean", + "title": "Whether the unit is required or not", + "description": "Whether the unit is required or not.\n\nWhen the unit is required, the customer must select the unit. If do not\nselect, customer can't buy it.\n\nFor example, if there's a sale \"Macbook Set\" and one of the unit is the\n\"Main Body\", is it possible to buy the \"Macbook Set\" without the\n\"Main Body\" unit? This property is for that case." + } + }, + "required": [ + "options", + "stocks", + "name", + "primary", + "required" + ], + "description": "Creation information of sale unit." + }, + "minItems": 1 + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "section_code", + "opened_at", + "closed_at", + "content", + "channels", + "units", + "tags" + ], + "description": "Creation information of sale." + }, + "description": "Get replica of a snapshot.\n\nGet a {@link IShoppingSale.ICreate } typed info of the target\n{@link IShoppingSaleSnapshot snapshot} record for replication.\n\nIt would be useful for creating a new replication {@link IShoppingSale sale}\nfrom the old snapshot." + }, + { + "method": "post", + "path": "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements", + "name": "shoppings_sellers_sales_units_stocks_supplements_postBySaleidAndUnitidAndStockid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged unit's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target stock's " + }, + { + "type": "object", + "properties": { + "value": { + "type": "integer", + "title": "Supplemented quantity", + "description": "Supplemented quantity." + } + }, + "required": [ + "value" + ], + "description": "Creation information of the supplement." + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "integer", + "title": "Supplemented quantity", + "description": "Supplemented quantity." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record.\n\nAnother words, the time when inventory of the stock being supplemented." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Supplementation of inventory quantity of stock.\n\nYou know what? If a {@link IShoppingSaleUnitStock stock} has been sold over\nits {@link IShoppingSaleUnitStock.ICreate.quantity initial inventory quantity},\nthe stock can't be sold anymore, because of out of stock. In that case, how the\n{@link IShoppingSeller } should do?\n\nWhen the sotck is sold out, seller can supplement the inventory record by\nregistering this `IShoppingSaleUnitStockSupplement` record. Right, this\n`IShoppingSaleUnitStockSupplement` is an entity that embodies the\nsupplementation of the inventory quantity of the belonged stock." + }, + "description": "Create a supplement.\n\nCreate a {@link IShoppingSaleUnitStockSupplement supplement history} of a\nspecific {@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be increased by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}." + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements", + "name": "shoppings_sellers_sales_units_stocks_supplements_patchBySaleidAndUnitidAndStockid", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged unit's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target stock's " + }, + { + "type": "object", + "properties": { + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-created_at", + "+created_at" + ] + }, + "title": "Sortable columns", + "description": "Sortable columns." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request information of the stock supplement list." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "integer", + "title": "Supplemented quantity", + "description": "Supplemented quantity." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record.\n\nAnother words, the time when inventory of the stock being supplemented." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Supplementation of inventory quantity of stock.\n\nYou know what? If a {@link IShoppingSaleUnitStock stock} has been sold over\nits {@link IShoppingSaleUnitStock.ICreate.quantity initial inventory quantity},\nthe stock can't be sold anymore, because of out of stock. In that case, how the\n{@link IShoppingSeller } should do?\n\nWhen the sotck is sold out, seller can supplement the inventory record by\nregistering this `IShoppingSaleUnitStockSupplement` record. Right, this\n`IShoppingSaleUnitStockSupplement` is an entity that embodies the\nsupplementation of the inventory quantity of the belonged stock." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every supplements.\n\nList up every {@link IShoppingSaleUnitStockSupplement supplement histories}\nof a specific {@link IShoppingSaleUnitStock stock}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleUnitStockSupplement.IRequest.search search condition} in\nthe request body. Also, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingSaleUnitStockSupplement.IRequest.sort }\nproperty." + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements/{id}", + "name": "shoppings_sellers_sales_units_stocks_supplements_putBySaleidAndUnitidAndStockidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged unit's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target stock's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target supplement's " + }, + { + "type": "object", + "properties": { + "value": { + "type": "integer", + "title": "Supplemented quantity", + "description": "Supplemented quantity." + } + }, + "required": [ + "value" + ], + "description": "Creation information of the supplement." + } + ], + "description": "Update a supplement.\n\nUpdate quantity value of a {@link IShoppingSaleUnitStockSupplement supplement}\nof a specific {@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be changed by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}." + }, + { + "method": "delete", + "path": "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements/{id}", + "name": "shoppings_sellers_sales_units_stocks_supplements_eraseBySaleidAndUnitidAndStockidAndId", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Belonged sale's " + }, + { + "type": "string", + "format": "uuid", + "description": "Belonged unit's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target stock's " + }, + { + "type": "string", + "format": "uuid", + "description": "Target supplement's " + } + ], + "description": "Erase a supplement.\n\nErase a {@link IShoppingSaleUnitStockSupplement supplement} of a specific\n{@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be decreased by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}." + }, + { + "method": "patch", + "path": "/shoppings/sellers/systematic/channels", + "name": "shoppings_sellers_systematic_channels_patch", + "parameters": [ + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-channel.code", + "-channel.name", + "-channel.created_at", + "+channel.code", + "+channel.name", + "+channel.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the channels with pagination and searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + }, + { + "method": "patch", + "path": "/shoppings/sellers/systematic/sections", + "name": "shoppings_sellers_systematic_sections_patch", + "parameters": [ + { + "type": "object", + "properties": { + "search": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "sort": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "-section.code", + "-section.name", + "-section.created_at", + "+section.code", + "+section.name", + "+section.created_at" + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the sections with pagination and searching/sorting options." + } + ], + "output": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}." + }, + { + "method": "get", + "path": "/shoppings/sellers/systematic/sections/{id}", + "name": "shoppings_sellers_systematic_sections_getById", + "parameters": [ + { + "type": "string", + "format": "uuid", + "description": "Target section's " + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." + }, + { + "method": "get", + "path": "/shoppings/sellers/systematic/sections/{code}/get", + "name": "shoppings_sellers_systematic_sections_get_getByCode", + "parameters": [ + { + "type": "string", + "description": "Target section's " + } + ], + "output": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code." + } + ], + "errors": [ + { + "method": "post", + "path": "/shoppings/admins/coupons", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/admins/coupons", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/coupons/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/admins/orders", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/orders/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/admins/sales", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/sales/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/admins/sales/{saleId}/snapshots", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/sales/{saleId}/snapshots/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/sales/{saleId}/snapshots/{id}/flip", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "post", + "path": "/shoppings/admins/systematic/channels/{channelCode}/categories", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/admins/systematic/channels/{channelCode}/categories", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}/invert", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/systematic/channels/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/admins/systematic/channels/hierarchical", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/admins/systematic/channels/{code}/get", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/coupons", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/coupons/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "post", + "path": "/shoppings/customers/coupons/tickets", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/coupons/tickets", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/coupons/tickets/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "post", + "path": "/shoppings/customers/carts/{cartId}/commodities", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/carts/{cartId}/commodities", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/carts/{cartId}/commodities/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/carts/{cartId}/commodities/discountable", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "post", + "path": "/shoppings/customers/orders", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/orders", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/orders/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/orders/{id}/price", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/orders/{id}/discountable", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "put", + "path": "/shoppings/customers/orders/{id}/discount", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/sales", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/sales/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/sales/{saleId}/snapshots", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/sales/{saleId}/snapshots/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/sales/{saleId}/snapshots/{id}/flip", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/systematic/channels/{channelCode}/categories", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}/invert", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/customers/systematic/channels/hierarchical", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/systematic/channels/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/customers/systematic/channels/{code}/get", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/sellers/deliveries", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/deliveries/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "post", + "path": "/shoppings/sellers/coupons", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/sellers/coupons", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/coupons/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/sellers/orders", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/orders/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "post", + "path": "/shoppings/sellers/sales", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/sales/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "put", + "path": "/shoppings/sellers/sales/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/sellers/sales/{saleId}/snapshots", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/sales/{saleId}/snapshots/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/sales/{saleId}/snapshots/{id}/flip", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/sellers/systematic/channels/{channelCode}/categories", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}/invert", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "patch", + "path": "/shoppings/sellers/systematic/channels/hierarchical", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/systematic/channels/{id}", + "messages": [ + "Failed to escape $ref" + ] + }, + { + "method": "get", + "path": "/shoppings/sellers/systematic/channels/{code}/get", + "messages": [ + "Failed to escape $ref" + ] + } + ], + "options": { + "keyword": false, + "separate": null + } +} \ No newline at end of file diff --git a/examples/positional/toss.json b/examples/positional/toss.json new file mode 100644 index 0000000..0d3890b --- /dev/null +++ b/examples/positional/toss.json @@ -0,0 +1,10688 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "post", + "path": "/v1/billing/authorizations/card", + "name": "v1_billing_authorizations_card_post", + "parameters": [ + { + "type": "object", + "properties": { + "cardNumber": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "cardExpirationYear": { + "description": "카드 만료 년도 (2 자리).", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{2}" + }, + "cardExpirationMonth": { + "description": "카드 만료 월 (2 자리).", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^(0[1-9]|1[012])$" + }, + "cardPassword": { + "description": "카드 비밀번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerBirthday": { + "description": "고객의 생년월일.\n\n표기 형식 YYMMDD.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "consumerName": { + "description": "고객의 이름.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customerEmail": { + "description": "고객의 이메일.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "vbv": { + "type": "object", + "properties": { + "cavv": { + "description": "3D Secure 인증 세션에 대한 인증 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "xid": { + "description": "트랜잭션 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "eci": { + "description": "3DS 인증 결과에 대한 코드 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "cavv", + "xid", + "eci" + ], + "x-typia-jsDocTags": [] + }, + "customerKey": { + "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "cardNumber", + "cardExpirationYear", + "cardExpirationMonth", + "cardPassword", + "customerBirthday", + "customerKey" + ], + "description": "간편 결제 카드 등록 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "billingKey": { + "description": "{@link ITossBilling } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardCompany": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "cardNumber": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "authenticatedAt": { + "description": "인증 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "customerKey": { + "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "mId", + "billingKey", + "method", + "cardCompany", + "cardNumber", + "authenticatedAt", + "customerKey" + ], + "description": "간편 결제 등록 수단 정보.\n\n`ITossBilling` 은 간편 결제 등록 수단을 형상화한 자료구조 인터페이스로써, 고객이 자신의\n신용 카드를 서버에 등록해두고, 매번 결제가 필요할 때마다 카드 정보를 반복 입려하는 일\n없이 간편하게 결제를 진행하고자 할 때 사용한다.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "간편 결제 카드 등록하기.\n\n`billing.authorizations.card.store` 는 고객이 자신의 신록 카드를 서버에 등록해두고,\n매번 결제가 필요할 때마다 카드 정보를 반복 입력하는 일 없이 간편하게 결제를\n진행하고자 할 때, 호출되는 API 함수이다.\n\n참고로 `billing.authorizations.card.store` 는 클라이언트 어플리케이션이 토스\n페이먼츠가 제공하는 간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를\n실 서비스에서 호출하는 일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는\n상황을 시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다." + }, + { + "method": "post", + "path": "/v1/billing/authorizations/{billingKey}", + "name": "v1_billing_authorizations_postByBillingkey", + "parameters": [ + { + "type": "string", + "description": "대상 정보의 " + }, + { + "type": "object", + "properties": { + "customerKey": { + "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "customerKey" + ], + "description": "고객 식별자 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "billingKey": { + "description": "{@link ITossBilling } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardCompany": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "cardNumber": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "authenticatedAt": { + "description": "인증 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "customerKey": { + "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "mId", + "billingKey", + "method", + "cardCompany", + "cardNumber", + "authenticatedAt", + "customerKey" + ], + "description": "간편 결제 등록 수단 정보.\n\n`ITossBilling` 은 간편 결제 등록 수단을 형상화한 자료구조 인터페이스로써, 고객이 자신의\n신용 카드를 서버에 등록해두고, 매번 결제가 필요할 때마다 카드 정보를 반복 입려하는 일\n없이 간편하게 결제를 진행하고자 할 때 사용한다.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "간편 결제로 등록한 수단 조회하기.\n\n`billing.authorizations.at` 은 고객이 간편 결제를 위하여 토스 페이먼츠 서버에\n등록한 결제 수단을 조회하는 함수이다.\n\n주로 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로 제공하는 결제 창을 사용하는\n경우, 그래서 프론트 어플리케이션이 귀하의 백엔드 서버에 `billingKey` 와` customerKey`\n만을 전달해주어, 상세 간편 결제 수단 정보가 필요할 때 사용한다." + }, + { + "method": "post", + "path": "/v1/billing/{billingKey}", + "name": "v1_billing_postByBillingkey", + "parameters": [ + { + "type": "string", + "description": "간편 결제에 등록한 수단의 " + }, + { + "type": "object", + "properties": { + "method": { + "type": "string", + "enum": [ + "billing" + ], + "description": "결제 수단이 간편 결제임을 의미함.", + "x-typia-required": true, + "x-typia-optional": false + }, + "billingKey": { + "description": "{@link IPaymentStore } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "customerKey": { + "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "method", + "billingKey", + "orderId", + "amount", + "customerKey" + ], + "description": "간편 결제를 이용한 결제 신청 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "oneOf": [ + { + "type": "object", + "properties": { + "card": { + "type": "object", + "properties": { + "company": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "installmentPlanMonths": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "isInterestFree": { + "type": "boolean", + "description": "무이자 할부 적용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "useCardPoint": { + "type": "boolean", + "description": "카드 포인트 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardType": { + "type": "string", + "enum": [ + "신용", + "체크", + "기프트" + ], + "description": "카드 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "ownerType": { + "type": "string", + "enum": [ + "개인", + "법인" + ], + "description": "카드의 소유자 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "acquireStatus": { + "type": "string", + "enum": [ + "READY", + "CANCELED", + "REQUESTED", + "COMPLETED", + "CANCEL_REQUESTED" + ], + "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨", + "x-typia-required": true, + "x-typia-optional": false + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "company", + "number", + "installmentPlanMonths", + "isInterestFree", + "approveNo", + "useCardPoint", + "cardType", + "ownerType", + "acquireStatus", + "receiptUrl" + ], + "description": "카드 정보.", + "x-typia-jsDocTags": [] + }, + "discount": { + "type": "object", + "properties": { + "amount": { + "description": "카드사의 즉시 할인 프로모션을 적용한 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "nullable": true, + "required": [ + "amount" + ], + "description": "카드사의 즉시 할인 프로모션 정보.", + "x-typia-jsDocTags": [] + }, + "easyPay": { + "type": "string", + "enum": [ + "토스결제", + "페이코", + "삼성페이" + ], + "nullable": true, + "description": "간편결제로 결제한 경우 간편결제 타입 정보.", + "x-typia-required": true, + "x-typia-optional": false + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL", + "BILLING" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "card", + "discount", + "easyPay", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "giftCertificate": { + "type": "object", + "properties": { + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETE", + "INCOMPLETE" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "approveNo", + "settlementStatus" + ], + "description": "상품권 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "상품권" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "giftCertificate", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "상품권 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "mobilePhone": { + "type": "object", + "properties": { + "carrier": { + "description": "통신사.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerMobilePhone": { + "description": "고객 휴대폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "carrier", + "customerMobilePhone", + "settlementStatus" + ], + "description": "휴대폰 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "휴대폰" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "mobilePhone", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "휴대폰 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "transfer": { + "type": "object", + "properties": { + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "이체 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "bank", + "settlementStatus" + ], + "description": "계좌 이체 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "계좌이체" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "transfer", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "secret": { + "description": "가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "virtualAccount": { + "type": "object", + "properties": { + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountType": { + "type": "string", + "enum": [ + "일반", + "고정" + ], + "description": "가상 계좌 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "dueDate": { + "description": "입금 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date" + }, + "expired": { + "type": "boolean", + "description": "가상 계좌 만료 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + }, + "refundStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "NONE", + "FAILED", + "PENDING", + "PARTIAL_FAILED" + ], + "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "accountNumber", + "accountType", + "bank", + "customerName", + "dueDate", + "expired", + "settlementStatus", + "refundStatus" + ], + "description": "가상 계좌 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "가상계좌" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "secret", + "virtualAccount", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + ], + "description": "결제 정보.\n\n`ITossPayment` 는 토스 페이먼츠의 결제 정보를 형상화한 자료구조이자 유니언 타입의 \n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.method === \"카드\")\n payment.card; // payment be ITossCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "간편 결제에 등록한 수단으로 결제하기.\n\n`billing.pay` 는 간편 결제에 등록한 수단으로 결제를 진행하고자 할 때 호출하는 API\n함수이다.\n\n그리고 `billing.pay` 는 결제 수단 중 유일하게, 클라이언트 어플리케이션이 토스\n페이먼츠가 제공하는 결제 창을 사용할 수 없어, 귀하의 백엔드 서버가 토스 페이먼츠의\nAPI 함수를 직접 호출해야 하는 경우에 해당한다. 따라서 간편 결제에 관련하여 토스\n페이먼츠와 연동하는 백엔드 서버 및 프론트 어플리케이션을 개발할 때, 반드시 이 상황에\n대한 별도의 설계 및 개발이 필요하니, 이 점을 염두에 두기 바란다.\n\n더하여 `billing.pay` 는 철저히 귀사 백엔드 서버의 판단 아래 호출되는 API 함수인지라,\n이를 통하여 이루어지는 결제는 일절 {@link payments.approve } 가 필요 없다. 다만\n`billing.pay` 는 이처럼 부차적인 승인 과정 필요없이 그 즉시로 결제가 완성되니, 이를\n호출하는 상황에 대하여 세심히 주의를 기울일 필요가 있다" + }, + { + "method": "post", + "path": "/v1/cash-receipts", + "name": "v1_cash_receipts_post", + "parameters": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류.", + "x-typia-required": true, + "x-typia-optional": false + }, + "paymentKey": { + "description": "귀속 결제의 {@link ITossPayment.paymentKey }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문의 식별자 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "registrationNumber": { + "description": "현금 영수증 발급을 위한 개인 식별 번호.\n\n현금 영수증의 종류에 따라 휴대폰 번호나 주민등록번호 또는 사업자등록번호 및 \n카드 번호를 입력할 수 있다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "현금 영수증을 발행할 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 금액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "businessNumber": { + "description": "사업자 등록번호.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "required": [ + "type", + "paymentKey", + "orderId", + "orderName", + "registrationNumber", + "amount" + ], + "description": "현금 영수증 입력 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "receiptKey": { + "description": "현금 영수증의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "orderId": { + "description": "주문의 식별자 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "approvalNumber": { + "description": "현금 영수증 승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "approvedAt": { + "description": "현금 영수증 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "canceledAt": { + "description": "현금 영수증 취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "receiptKey", + "type", + "orderId", + "orderName", + "approvalNumber", + "approvedAt", + "canceledAt", + "receiptUrl" + ], + "description": "현금 영수증 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "현금 영수증 발행하기." + }, + { + "method": "post", + "path": "/v1/cash-receipts/{receiptKey}/cancel", + "name": "v1_cash_receipts_cancel_postByReceiptkey", + "parameters": [ + { + "type": "string", + "description": "현금 영수증의 " + }, + { + "type": "object", + "properties": { + "amount": { + "description": "취소 금액.\n\n미 입력시 현금 영수증에 기재된 {@link ITossCashReceipt.amount 총액}이 취소됨.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + } + }, + "description": "현금 영수증 취소 입력 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "receiptKey": { + "description": "현금 영수증의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "orderId": { + "description": "주문의 식별자 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "approvalNumber": { + "description": "현금 영수증 승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "approvedAt": { + "description": "현금 영수증 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "canceledAt": { + "description": "현금 영수증 취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "receiptKey", + "type", + "orderId", + "orderName", + "approvalNumber", + "approvedAt", + "canceledAt", + "receiptUrl" + ], + "description": "현금 영수증 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "현금 영수증 취소하기." + }, + { + "method": "post", + "path": "/internal/webhook", + "name": "internal_webhook_post", + "parameters": [ + { + "type": "object", + "properties": { + "eventType": { + "type": "string", + "enum": [ + "PAYMENT_STATUS_CHANGED" + ], + "description": "이벤트 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "data": { + "type": "object", + "properties": { + "paymentKey": { + "description": "{@link ITossPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED" + ], + "description": "결제 상태.\n\n - DONE: 결제 완료\n - CANCELED: 결제가 취소됨\n - PARTIAL_CANCELED: 결제가 부분 취소됨\n - WAITING_FOR_DEPOSIT: 입금 대기 중", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "paymentKey", + "orderId", + "status" + ], + "description": "웹훅 이벤트 데이터.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "eventType", + "data" + ], + "description": "웹훅 이벤트 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + ], + "description": "웹훅 이벤트 더미 리스너.\n\n`internal.webhook` 은 실제 토스 페이먼츠의 결제 서버에는 존재하지 않는 API 로써,\n`fake-toss-payments-server` 의 {@link Configuration.WEBHOOK_URL } 에 아무런 URL 을\n설정하지 않으면, `fake-toss-payments-server` 로부터 발생하는 모든 종류의 웹훅\n이벤트는 이 곳으로 전달되어 무의미하게 사라진다.\n\n따라서 `fake-toss-payments-server` 를 사용하여 토스 페이먼츠 서버와의 연동을 미리\n검증코자 할 때는, 반드시 {@link Configuration.WEBHOOK_URL } 를 설정하여 웹훅\n이벤트가 귀하의 백엔드 서버로 제대로 전달되도록 하자." + }, + { + "method": "get", + "path": "/internal/{paymentKey}/deposit", + "name": "internal_deposit_getByPaymentkey", + "parameters": [ + { + "type": "string", + "description": "대상 가상 계좌 결제 정보의 " + } + ], + "output": { + "oneOf": [ + { + "type": "object", + "properties": { + "card": { + "type": "object", + "properties": { + "company": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "installmentPlanMonths": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "isInterestFree": { + "type": "boolean", + "description": "무이자 할부 적용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "useCardPoint": { + "type": "boolean", + "description": "카드 포인트 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardType": { + "type": "string", + "enum": [ + "신용", + "체크", + "기프트" + ], + "description": "카드 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "ownerType": { + "type": "string", + "enum": [ + "개인", + "법인" + ], + "description": "카드의 소유자 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "acquireStatus": { + "type": "string", + "enum": [ + "READY", + "CANCELED", + "REQUESTED", + "COMPLETED", + "CANCEL_REQUESTED" + ], + "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨", + "x-typia-required": true, + "x-typia-optional": false + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "company", + "number", + "installmentPlanMonths", + "isInterestFree", + "approveNo", + "useCardPoint", + "cardType", + "ownerType", + "acquireStatus", + "receiptUrl" + ], + "description": "카드 정보.", + "x-typia-jsDocTags": [] + }, + "discount": { + "type": "object", + "properties": { + "amount": { + "description": "카드사의 즉시 할인 프로모션을 적용한 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "nullable": true, + "required": [ + "amount" + ], + "description": "카드사의 즉시 할인 프로모션 정보.", + "x-typia-jsDocTags": [] + }, + "easyPay": { + "type": "string", + "enum": [ + "토스결제", + "페이코", + "삼성페이" + ], + "nullable": true, + "description": "간편결제로 결제한 경우 간편결제 타입 정보.", + "x-typia-required": true, + "x-typia-optional": false + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL", + "BILLING" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "card", + "discount", + "easyPay", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "giftCertificate": { + "type": "object", + "properties": { + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETE", + "INCOMPLETE" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "approveNo", + "settlementStatus" + ], + "description": "상품권 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "상품권" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "giftCertificate", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "상품권 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "mobilePhone": { + "type": "object", + "properties": { + "carrier": { + "description": "통신사.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerMobilePhone": { + "description": "고객 휴대폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "carrier", + "customerMobilePhone", + "settlementStatus" + ], + "description": "휴대폰 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "휴대폰" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "mobilePhone", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "휴대폰 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "transfer": { + "type": "object", + "properties": { + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "이체 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "bank", + "settlementStatus" + ], + "description": "계좌 이체 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "계좌이체" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "transfer", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "secret": { + "description": "가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "virtualAccount": { + "type": "object", + "properties": { + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountType": { + "type": "string", + "enum": [ + "일반", + "고정" + ], + "description": "가상 계좌 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "dueDate": { + "description": "입금 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date" + }, + "expired": { + "type": "boolean", + "description": "가상 계좌 만료 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + }, + "refundStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "NONE", + "FAILED", + "PENDING", + "PARTIAL_FAILED" + ], + "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "accountNumber", + "accountType", + "bank", + "customerName", + "dueDate", + "expired", + "settlementStatus", + "refundStatus" + ], + "description": "가상 계좌 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "가상계좌" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "secret", + "virtualAccount", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + ], + "description": "결제 정보.\n\n`ITossPayment` 는 토스 페이먼츠의 결제 정보를 형상화한 자료구조이자 유니언 타입의 \n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.method === \"카드\")\n payment.card; // payment be ITossCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "가상 계좌에 입금하기.\n\n`internal.virtual_accounts.deposit` 은 실제 토스 페이먼츠의 결제 서버에는 존재하지\n않는 API 로써, 가상 계좌 결제를 신청한 고객이, 이후 가상 계좌에 목표 금액을 입금하는\n상황을 시뮬레이션할 수 있는 함수이다.\n\n즉 `internal.virtual_accounts.deposit` 는 고객이 스스로에게 가상으로 발급된 계좌에\n입금을 하고, 그에 따라 토스 페이먼츠 서버에서 webhook 이벤트가 발생하여 이를 귀하의\n백엔드 서버로 전송하는 일련의 상황을 테스트하기 위한 함수인 셈이다." + }, + { + "method": "get", + "path": "/v1/payments/{paymentKey}", + "name": "v1_payments_getByPaymentkey", + "parameters": [ + { + "type": "string", + "description": "결제 정보의 " + } + ], + "output": { + "oneOf": [ + { + "type": "object", + "properties": { + "card": { + "type": "object", + "properties": { + "company": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "installmentPlanMonths": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "isInterestFree": { + "type": "boolean", + "description": "무이자 할부 적용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "useCardPoint": { + "type": "boolean", + "description": "카드 포인트 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardType": { + "type": "string", + "enum": [ + "신용", + "체크", + "기프트" + ], + "description": "카드 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "ownerType": { + "type": "string", + "enum": [ + "개인", + "법인" + ], + "description": "카드의 소유자 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "acquireStatus": { + "type": "string", + "enum": [ + "READY", + "CANCELED", + "REQUESTED", + "COMPLETED", + "CANCEL_REQUESTED" + ], + "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨", + "x-typia-required": true, + "x-typia-optional": false + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "company", + "number", + "installmentPlanMonths", + "isInterestFree", + "approveNo", + "useCardPoint", + "cardType", + "ownerType", + "acquireStatus", + "receiptUrl" + ], + "description": "카드 정보.", + "x-typia-jsDocTags": [] + }, + "discount": { + "type": "object", + "properties": { + "amount": { + "description": "카드사의 즉시 할인 프로모션을 적용한 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "nullable": true, + "required": [ + "amount" + ], + "description": "카드사의 즉시 할인 프로모션 정보.", + "x-typia-jsDocTags": [] + }, + "easyPay": { + "type": "string", + "enum": [ + "토스결제", + "페이코", + "삼성페이" + ], + "nullable": true, + "description": "간편결제로 결제한 경우 간편결제 타입 정보.", + "x-typia-required": true, + "x-typia-optional": false + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL", + "BILLING" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "card", + "discount", + "easyPay", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "giftCertificate": { + "type": "object", + "properties": { + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETE", + "INCOMPLETE" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "approveNo", + "settlementStatus" + ], + "description": "상품권 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "상품권" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "giftCertificate", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "상품권 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "mobilePhone": { + "type": "object", + "properties": { + "carrier": { + "description": "통신사.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerMobilePhone": { + "description": "고객 휴대폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "carrier", + "customerMobilePhone", + "settlementStatus" + ], + "description": "휴대폰 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "휴대폰" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "mobilePhone", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "휴대폰 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "transfer": { + "type": "object", + "properties": { + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "이체 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "bank", + "settlementStatus" + ], + "description": "계좌 이체 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "계좌이체" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "transfer", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "secret": { + "description": "가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "virtualAccount": { + "type": "object", + "properties": { + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountType": { + "type": "string", + "enum": [ + "일반", + "고정" + ], + "description": "가상 계좌 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "dueDate": { + "description": "입금 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date" + }, + "expired": { + "type": "boolean", + "description": "가상 계좌 만료 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + }, + "refundStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "NONE", + "FAILED", + "PENDING", + "PARTIAL_FAILED" + ], + "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "accountNumber", + "accountType", + "bank", + "customerName", + "dueDate", + "expired", + "settlementStatus", + "refundStatus" + ], + "description": "가상 계좌 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "가상계좌" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "secret", + "virtualAccount", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + ], + "description": "결제 정보.\n\n`ITossPayment` 는 토스 페이먼츠의 결제 정보를 형상화한 자료구조이자 유니언 타입의 \n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.method === \"카드\")\n payment.card; // payment be ITossCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "결제 정보 조회하기.\n\n`payments.at` 은 결제 정보를 조회하는 함수이다.\n\n주로 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로 제공하는 결제 창을 사용하는\n경우, 그래서 프론트 어플리케이션이 귀하의 백엔드 서버에 `paymentKey` 등 극히 일부의\n식별자 정보만을 전달해주어, 상세 결제 정보가 필요할 때 사용한다.\n\n참고로 토스 페이먼츠는 다른 결제 PG 사들과 다르게, 클라이언트 어플리케이션에서 토스\n페이먼츠의 결제 창을 이용하여 진행한 결제가 바로 확정되는 것은 아니다. 귀사의 백엔드\n서버가 현재의 `payments.at` 을 통하여 해당 결제 정보를 확인하고, {@link approve } 를\n호출하여 직접 승인하기 전까지, 해당 결제는 확정되지 않으니, 이 점에 유의하기 바란다." + }, + { + "method": "post", + "path": "/v1/payments/{paymentKey}", + "name": "v1_payments_postByPaymentkey", + "parameters": [ + { + "type": "string", + "description": "대상 결제의 " + }, + { + "type": "object", + "properties": { + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "required": [ + "orderId", + "amount" + ], + "description": "결제 승인 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "oneOf": [ + { + "type": "object", + "properties": { + "card": { + "type": "object", + "properties": { + "company": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "installmentPlanMonths": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "isInterestFree": { + "type": "boolean", + "description": "무이자 할부 적용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "useCardPoint": { + "type": "boolean", + "description": "카드 포인트 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardType": { + "type": "string", + "enum": [ + "신용", + "체크", + "기프트" + ], + "description": "카드 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "ownerType": { + "type": "string", + "enum": [ + "개인", + "법인" + ], + "description": "카드의 소유자 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "acquireStatus": { + "type": "string", + "enum": [ + "READY", + "CANCELED", + "REQUESTED", + "COMPLETED", + "CANCEL_REQUESTED" + ], + "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨", + "x-typia-required": true, + "x-typia-optional": false + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "company", + "number", + "installmentPlanMonths", + "isInterestFree", + "approveNo", + "useCardPoint", + "cardType", + "ownerType", + "acquireStatus", + "receiptUrl" + ], + "description": "카드 정보.", + "x-typia-jsDocTags": [] + }, + "discount": { + "type": "object", + "properties": { + "amount": { + "description": "카드사의 즉시 할인 프로모션을 적용한 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "nullable": true, + "required": [ + "amount" + ], + "description": "카드사의 즉시 할인 프로모션 정보.", + "x-typia-jsDocTags": [] + }, + "easyPay": { + "type": "string", + "enum": [ + "토스결제", + "페이코", + "삼성페이" + ], + "nullable": true, + "description": "간편결제로 결제한 경우 간편결제 타입 정보.", + "x-typia-required": true, + "x-typia-optional": false + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL", + "BILLING" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "card", + "discount", + "easyPay", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "giftCertificate": { + "type": "object", + "properties": { + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETE", + "INCOMPLETE" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "approveNo", + "settlementStatus" + ], + "description": "상품권 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "상품권" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "giftCertificate", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "상품권 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "mobilePhone": { + "type": "object", + "properties": { + "carrier": { + "description": "통신사.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerMobilePhone": { + "description": "고객 휴대폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "carrier", + "customerMobilePhone", + "settlementStatus" + ], + "description": "휴대폰 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "휴대폰" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "mobilePhone", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "휴대폰 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "transfer": { + "type": "object", + "properties": { + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "이체 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "bank", + "settlementStatus" + ], + "description": "계좌 이체 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "계좌이체" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "transfer", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "secret": { + "description": "가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "virtualAccount": { + "type": "object", + "properties": { + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountType": { + "type": "string", + "enum": [ + "일반", + "고정" + ], + "description": "가상 계좌 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "dueDate": { + "description": "입금 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date" + }, + "expired": { + "type": "boolean", + "description": "가상 계좌 만료 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + }, + "refundStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "NONE", + "FAILED", + "PENDING", + "PARTIAL_FAILED" + ], + "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "accountNumber", + "accountType", + "bank", + "customerName", + "dueDate", + "expired", + "settlementStatus", + "refundStatus" + ], + "description": "가상 계좌 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "가상계좌" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "secret", + "virtualAccount", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + ], + "description": "결제 정보.\n\n`ITossPayment` 는 토스 페이먼츠의 결제 정보를 형상화한 자료구조이자 유니언 타입의 \n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.method === \"카드\")\n payment.card; // payment be ITossCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "결제 승인하기.\n\n토스 페이먼츠는 귀사의 백엔드에서 일어난 결제가 아닌 프론트 어플리케이션의 결제 창에서\n이루어진 결제의 경우, 해당 서비스으 백엔드 서버로부터 결제를 승인받기 전까지, 이를\n확정하지 않는다. `payments.approve` 는 바로 이러한 상황에서, 해당 결제를 승인해주는\n함수이다.\n\n만일 귀하가 `fake-toss-payments-server` 를 이용하여 결제를 시뮬레이션하는 경우라면,\n결제 관련 API 를 호출함에 있어 {@link ITossCardPayment.IStore.__approved } 내지\n{@link ITossVirtualAccountPayment.IStore.__approved } 를 `false` 로 함으로써, 별도\n승인이 필요한 이러한 상황을 시뮬레이션 할 수 있다." + }, + { + "method": "post", + "path": "/v1/payments/key-in", + "name": "v1_payments_key_in_post", + "parameters": [ + { + "type": "object", + "properties": { + "method": { + "type": "string", + "enum": [ + "card" + ], + "description": "결제 수단이 신용 카드임을 의미.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardNumber": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "cardExpirationYear": { + "description": "카드 만료 년도 (2 자리).", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{2}" + }, + "cardExpirationMonth": { + "description": "카드 만료 월 (2 자리).", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^(0[1-9]|1[012])$" + }, + "cardPassword": { + "description": "카드 비밀번호.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "cardInstallmentPlan": { + "description": "할부 개월 수.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "amount": { + "description": "지불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세금 총액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customerBirthday": { + "description": "고객의 생년월일.\n\n표기 형식 YYMMDD.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "pattern": "^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "customerEmail": { + "description": "고객의 이메일.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "vbv": { + "type": "object", + "properties": { + "cavv": { + "description": "3D Secure 인증 세션에 대한 인증 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "xid": { + "description": "트랜잭션 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "eci": { + "description": "3DS 인증 결과에 대한 코드 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "cavv", + "xid", + "eci" + ], + "x-typia-jsDocTags": [] + }, + "__approved": { + "type": "boolean", + "description": "결제 승인 여부.\n\n오직 가짜 페이먼츠 서버 `fake-toss-payments-server` 에서만 사용되는 값으로써, \n결제 승인을 고의로 지연시키거나 할 때 사용된다. 이 값을 `false` 로 하면, 프론트 \n어플리케이션이 토스 페이먼츠가 제공해주는 결제 창을 사용하여 결제를 진행하는 \n상황을 시뮬레이션할 수 있다.\n\n본디 토스 페이먼츠 서버는 프론트 어플리케이션에서 백엔드 서버를 거치지 않고,\n토스 페이먼츠가 제공해주는 결제 창을 이용하여 직접 결제를 요청하는 경우, \n백엔드에서 이를 별도 {@link functional.payments.approve 승인} 처리해주기 전까지 \n정식 결제로 인청치 아니한다.\n\n반면 백엔드 서버에서 토스 페이먼츠 서버의 API 를 호출하는 경우, 토스 페이먼츠는\n이를 그 즉시로 승인해주기, `fake-toss-payments-server` 에서 별도의 승인 처리가\n필요한 상황을 시뮬레이션하기 위해서는 이러한 속성이 필요한 것.", + "x-typia-required": false, + "x-typia-optional": true + } + }, + "required": [ + "method", + "cardNumber", + "cardExpirationYear", + "cardExpirationMonth", + "amount", + "orderId" + ], + "description": "신용 카드를 이용한 결제 신청 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "card": { + "type": "object", + "properties": { + "company": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "installmentPlanMonths": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "isInterestFree": { + "type": "boolean", + "description": "무이자 할부 적용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "useCardPoint": { + "type": "boolean", + "description": "카드 포인트 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardType": { + "type": "string", + "enum": [ + "신용", + "체크", + "기프트" + ], + "description": "카드 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "ownerType": { + "type": "string", + "enum": [ + "개인", + "법인" + ], + "description": "카드의 소유자 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "acquireStatus": { + "type": "string", + "enum": [ + "READY", + "CANCELED", + "REQUESTED", + "COMPLETED", + "CANCEL_REQUESTED" + ], + "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨", + "x-typia-required": true, + "x-typia-optional": false + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "company", + "number", + "installmentPlanMonths", + "isInterestFree", + "approveNo", + "useCardPoint", + "cardType", + "ownerType", + "acquireStatus", + "receiptUrl" + ], + "description": "카드 정보.", + "x-typia-jsDocTags": [] + }, + "discount": { + "type": "object", + "properties": { + "amount": { + "description": "카드사의 즉시 할인 프로모션을 적용한 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "nullable": true, + "required": [ + "amount" + ], + "description": "카드사의 즉시 할인 프로모션 정보.", + "x-typia-jsDocTags": [] + }, + "easyPay": { + "type": "string", + "enum": [ + "토스결제", + "페이코", + "삼성페이" + ], + "nullable": true, + "description": "간편결제로 결제한 경우 간편결제 타입 정보.", + "x-typia-required": true, + "x-typia-optional": false + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL", + "BILLING" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "card", + "discount", + "easyPay", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "카드로 결제하기.\n\n`payments.key_in` 은 카드를 이용한 결제를 할 때 호출되는 API 함수이다.\n\n참고로 `payments.key_in` 는 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로\n제공하는 결제 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는\n일은 없을 것이다. 다만, 고객이 카드를 통하여 결제하는 상황을 시뮬레이션하기 위하여,\n테스트 자동화 프로그램 수준에서 사용될 수는 있다.\n\n그리고 귀하의 백엔드 서버가 `payments.key-in` 을 직접 호출하는 경우, 토스 페이먼츠\n서버는 이를 완전히 승인된 결제로 보고 바로 확정한다. 때문에 `payments.key-in` 을\n직접 호출하는 경우, 토스 페이먼츠의 결제 창을 이용하여 별도의 {@link approve } 가\n필요한 때 대비, 훨씬 더 세심한 주의가 요구된다.\n\n더하여 만약 귀하의 백엔드 서버가 `fake-toss-payments-server` 를 이용하여 고객의\n카드 결제를 시뮬레이션하는 경우, {@link ITossCardPayment.IStore.__approved } 값을\n`false` 로 하여 카드 결제의 확정을 고의로 회피할 수 있다. 이를 통하여 토스\n페이먼츠의 결제 창을 이용한 카드 결제의 경우, 별도의 {@link approve } 가 필요한\n상황을 시뮬레이션 할 수 있다." + }, + { + "method": "post", + "path": "/v1/payments/{paymentKey}/cancel", + "name": "v1_payments_cancel_postByPaymentkey", + "parameters": [ + { + "type": "string", + "description": "결제 정보의 " + }, + { + "type": "object", + "properties": { + "paymentKey": { + "description": "{@link ITossPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "refundReceiveAccount": { + "type": "object", + "properties": { + "bank": { + "description": "은행 정보.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^[0-9]{0,20}$" + }, + "holderName": { + "description": "예금주.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "required": [ + "bank", + "accountNumber", + "holderName" + ], + "x-typia-jsDocTags": [] + }, + "taxAmount": { + "description": "과세 처리 금액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리 금액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + } + }, + "required": [ + "paymentKey", + "cancelReason" + ], + "description": "결제 취소 신청 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "oneOf": [ + { + "type": "object", + "properties": { + "card": { + "type": "object", + "properties": { + "company": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "installmentPlanMonths": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "isInterestFree": { + "type": "boolean", + "description": "무이자 할부 적용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "useCardPoint": { + "type": "boolean", + "description": "카드 포인트 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cardType": { + "type": "string", + "enum": [ + "신용", + "체크", + "기프트" + ], + "description": "카드 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "ownerType": { + "type": "string", + "enum": [ + "개인", + "법인" + ], + "description": "카드의 소유자 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "acquireStatus": { + "type": "string", + "enum": [ + "READY", + "CANCELED", + "REQUESTED", + "COMPLETED", + "CANCEL_REQUESTED" + ], + "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨", + "x-typia-required": true, + "x-typia-optional": false + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "required": [ + "company", + "number", + "installmentPlanMonths", + "isInterestFree", + "approveNo", + "useCardPoint", + "cardType", + "ownerType", + "acquireStatus", + "receiptUrl" + ], + "description": "카드 정보.", + "x-typia-jsDocTags": [] + }, + "discount": { + "type": "object", + "properties": { + "amount": { + "description": "카드사의 즉시 할인 프로모션을 적용한 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "nullable": true, + "required": [ + "amount" + ], + "description": "카드사의 즉시 할인 프로모션 정보.", + "x-typia-jsDocTags": [] + }, + "easyPay": { + "type": "string", + "enum": [ + "토스결제", + "페이코", + "삼성페이" + ], + "nullable": true, + "description": "간편결제로 결제한 경우 간편결제 타입 정보.", + "x-typia-required": true, + "x-typia-optional": false + }, + "method": { + "type": "string", + "enum": [ + "카드" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL", + "BILLING" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "card", + "discount", + "easyPay", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "giftCertificate": { + "type": "object", + "properties": { + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETE", + "INCOMPLETE" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "approveNo", + "settlementStatus" + ], + "description": "상품권 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "상품권" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "giftCertificate", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "상품권 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "mobilePhone": { + "type": "object", + "properties": { + "carrier": { + "description": "통신사.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerMobilePhone": { + "description": "고객 휴대폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "carrier", + "customerMobilePhone", + "settlementStatus" + ], + "description": "휴대폰 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "휴대폰" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "mobilePhone", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "휴대폰 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "transfer": { + "type": "object", + "properties": { + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "이체 상태.", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "bank", + "settlementStatus" + ], + "description": "계좌 이체 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "계좌이체" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "transfer", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + { + "type": "object", + "properties": { + "secret": { + "description": "가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "virtualAccount": { + "type": "object", + "properties": { + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountType": { + "type": "string", + "enum": [ + "일반", + "고정" + ], + "description": "가상 계좌 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "dueDate": { + "description": "입금 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date" + }, + "expired": { + "type": "boolean", + "description": "가상 계좌 만료 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + }, + "refundStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "NONE", + "FAILED", + "PENDING", + "PARTIAL_FAILED" + ], + "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "accountNumber", + "accountType", + "bank", + "customerName", + "dueDate", + "expired", + "settlementStatus", + "refundStatus" + ], + "description": "가상 계좌 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "가상계좌" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "secret", + "virtualAccount", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + } + ], + "description": "결제 정보.\n\n`ITossPayment` 는 토스 페이먼츠의 결제 정보를 형상화한 자료구조이자 유니언 타입의 \n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.method === \"카드\")\n payment.card; // payment be ITossCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "결제 취소하기.\n\n`payments.cancel` 은 결제를 취소하는 API 이다.\n\n결제 취소 입력 정보 {@link ITossPaymentCancel.IStore } 에는 취소 사유를 비롯하여,\n고객에게 환불해 줄 금액과 부가세 및 필요시 환불 계좌 정보 등을 입력하게 되어있다." + }, + { + "method": "post", + "path": "/v1/virtual-accounts", + "name": "v1_virtual_accounts_post", + "parameters": [ + { + "type": "object", + "properties": { + "method": { + "type": "string", + "enum": [ + "virtual-account" + ], + "description": "결제 수단이 가상 계좌임을 의미.", + "x-typia-required": true, + "x-typia-optional": false + }, + "orderId": { + "description": "주문 식별자 번호.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "__approved": { + "type": "boolean", + "description": "결제 승인 여부.\n\n오직 가짜 페이먼츠 서버 `fake-toss-payments-server` 에서만 사용되는 값으로써, \n결제 승인을 고의로 지연시키거나 할 때 사용된다. 이 값을 `false` 로 하면, 프론트 \n어플리케이션이 토스 페이먼츠가 제공해주는 결제 창을 사용하여 결제를 진행하는 \n상황을 시뮬레이션할 수 있다.\n\n본디 토스 페이먼츠 서버는 프론트 어플리케이션에서 백엔드 서버를 거치지 않고,\n토스 페이먼츠가 제공해주는 결제 창을 이용하여 직접 결제를 요청하는 경우, \n백엔드에서 이를 별도 {@link functional.payments.approve 승인} 처리해주기 전까지 \n정식 결제로 인청치 아니한다.\n\n반면 백엔드 서버에서 토스 페이먼츠 서버의 API 를 호출하는 경우, 토스 페이먼츠는\n이를 그 즉시로 승인해주기, `fake-toss-payments-server` 에서 별도의 승인 처리가\n필요한 상황을 시뮬레이션하기 위해서는 이러한 속성이 필요한 것.", + "x-typia-required": false, + "x-typia-optional": true + } + }, + "required": [ + "method", + "orderId", + "orderName", + "bank", + "customerName", + "amount" + ], + "description": "가상 계좌를 이용한 결제 신청 정보.", + "x-typia-jsDocTags": [] + } + ], + "output": { + "type": "object", + "properties": { + "secret": { + "description": "가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "virtualAccount": { + "type": "object", + "properties": { + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountType": { + "type": "string", + "enum": [ + "일반", + "고정" + ], + "description": "가상 계좌 타입.", + "x-typia-required": true, + "x-typia-optional": false + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "dueDate": { + "description": "입금 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date" + }, + "expired": { + "type": "boolean", + "description": "가상 계좌 만료 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "settlementStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ], + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false + }, + "refundStatus": { + "type": "string", + "enum": [ + "COMPLETED", + "NONE", + "FAILED", + "PENDING", + "PARTIAL_FAILED" + ], + "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료", + "x-typia-required": true, + "x-typia-optional": false + } + }, + "required": [ + "accountNumber", + "accountType", + "bank", + "customerName", + "dueDate", + "expired", + "settlementStatus", + "refundStatus" + ], + "description": "가상 계좌 정보.", + "x-typia-jsDocTags": [] + }, + "method": { + "type": "string", + "enum": [ + "가상계좌" + ], + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false + }, + "type": { + "type": "string", + "enum": [ + "NORMAL" + ], + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false + }, + "status": { + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ], + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "type": "boolean", + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false + }, + "cultureExpense": { + "type": "boolean", + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "nullable": true + }, + "cashReceipt": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ], + "description": "현금 영수증의 종류." + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + } + }, + "required": [ + "secret", + "virtualAccount", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "description": "가상 계좌로 결제 신청하기.\n\n`virtual_accounts.store` 는 고객이 결제 수단을 가상 계좌로 선택하는 경우에 호출되는\nAPI 함수이다. 물론 고객이 이처럼 가상 계좌를 선택한 경우, 고객이 지정된 계좌에 돈을\n입금하기 전까지는 결제가 마무리된 것이 아니기에, {@link ITossPayment.status } 값은\n`WAITING_FOR_DEPOSIT` 이 된다.\n\n참고로 `virtual_accounts.store` 는 클라이언트 어플리케이션이 토스 페이먼츠가\n자체적으로 제공하는 결제 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서\n호출하는 일은 없을 것이다. 다만, 고객이 가상 계좌로 결제를 진행하는 상황을\n시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다.\n\n그리고 `virtual_accounts.store` 이후에 고객이 지정된 계좌에 금액을 입금하거든, 토스\n페이먼츠 서버로부터 웹훅 이벤트가 발생되어 귀하의 백엔드 서버로 전송된다. 만약 연동\n대상 토스 페이먼츠 서버가 실제가 아닌 `fake-toss-payments-server` 라면,\n{@link internal.virtual_accounts.deposit } 를 호출하여, 고객이 가상 계좌에 입금하는\n상황을 시뮬레이션 할 수 있다." + } + ], + "errors": [], + "options": { + "keyword": false, + "separate": null + } +} \ No newline at end of file diff --git a/examples/positional/uber.json b/examples/positional/uber.json new file mode 100644 index 0000000..cd9ecbd --- /dev/null +++ b/examples/positional/uber.json @@ -0,0 +1,194 @@ +{ + "openapi": "3.0.3", + "functions": [ + { + "method": "get", + "path": "/products", + "name": "products_get", + "parameters": [ + { + "type": "object", + "properties": { + "latitude": { + "name": "latitude", + "in": "query", + "description": "Latitude component of location.", + "required": true, + "type": "number", + "format": "double" + }, + "longitude": { + "name": "longitude", + "in": "query", + "description": "Longitude component of location.", + "required": true, + "type": "number", + "format": "double" + } + }, + "required": [ + "latitude", + "longitude" + ] + } + ], + "output": { + "type": "array", + "items": {} + }, + "description": "Product Types.\n\nThe Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order." + }, + { + "method": "get", + "path": "/estimates/price", + "name": "estimates_price_get", + "parameters": [ + { + "type": "object", + "properties": { + "start_latitude": { + "name": "start_latitude", + "in": "query", + "description": "Latitude component of start location.", + "required": true, + "type": "number", + "format": "double" + }, + "start_longitude": { + "name": "start_longitude", + "in": "query", + "description": "Longitude component of start location.", + "required": true, + "type": "number", + "format": "double" + }, + "end_latitude": { + "name": "end_latitude", + "in": "query", + "description": "Latitude component of end location.", + "required": true, + "type": "number", + "format": "double" + }, + "end_longitude": { + "name": "end_longitude", + "in": "query", + "description": "Longitude component of end location.", + "required": true, + "type": "number", + "format": "double" + } + }, + "required": [ + "start_latitude", + "start_longitude", + "end_latitude", + "end_longitude" + ] + } + ], + "output": { + "type": "array", + "items": {} + }, + "description": "Price Estimates.\n\nThe Price Estimates endpoint returns an estimated price range for each product offered at a given location. The price estimate is provided as a formatted string with the full price range and the localized currency symbol.

The response also includes low and high estimates, and the [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code for situations requiring currency conversion. When surge is active for a particular product, its surge_multiplier will be greater than 1, but the price estimate already factors in this multiplier." + }, + { + "method": "get", + "path": "/estimates/time", + "name": "estimates_time_get", + "parameters": [ + { + "type": "object", + "properties": { + "start_latitude": { + "name": "start_latitude", + "in": "query", + "description": "Latitude component of start location.", + "required": true, + "type": "number", + "format": "double" + }, + "start_longitude": { + "name": "start_longitude", + "in": "query", + "description": "Longitude component of start location.", + "required": true, + "type": "number", + "format": "double" + }, + "customer_uuid": { + "name": "customer_uuid", + "in": "query", + "type": "string", + "format": "uuid", + "description": "Unique customer identifier to be used for experience customization." + }, + "product_id": { + "name": "product_id", + "in": "query", + "type": "string", + "description": "Unique identifier representing a specific product for a given latitude & longitude." + } + }, + "required": [ + "start_latitude", + "start_longitude", + "customer_uuid", + "product_id" + ] + } + ], + "output": { + "type": "array", + "items": {} + }, + "description": "Time Estimates.\n\nThe Time Estimates endpoint returns ETAs for all products offered at a given location, with the responses expressed as integers in seconds. We recommend that this endpoint be called every minute to provide the most accurate, up-to-date ETAs." + }, + { + "method": "get", + "path": "/me", + "name": "me_get", + "parameters": [], + "output": {}, + "description": "User Profile.\n\nThe User Profile endpoint returns information about the Uber user that has authorized with the application." + }, + { + "method": "get", + "path": "/history", + "name": "history_get", + "parameters": [ + { + "type": "object", + "properties": { + "offset": { + "name": "offset", + "in": "query", + "type": "integer", + "format": "int32", + "description": "Offset the list of returned results by this amount. Default is zero." + }, + "limit": { + "name": "limit", + "in": "query", + "type": "integer", + "format": "int32", + "description": "Number of items to retrieve. Default is 5, maximum is 100." + } + }, + "required": [ + "offset", + "limit" + ] + } + ], + "output": {}, + "description": "User Activity.\n\nThe User Activity endpoint returns data about a user's lifetime activity with Uber. The response will include pickup locations and times, dropoff locations and times, the distance of past requests, and information about which products were requested.

The history array in the response will have a maximum length based on the limit parameter. The response value count may exceed limit, therefore subsequent API requests may be necessary." + } + ], + "errors": [], + "options": { + "keyword": false, + "separate": null + } +} \ No newline at end of file diff --git a/examples/swagger/bbs.json b/examples/swagger/bbs.json new file mode 100644 index 0000000..1f2e82e --- /dev/null +++ b/examples/swagger/bbs.json @@ -0,0 +1,1666 @@ +{ + "openapi": "3.1.0", + "servers": [ + { + "url": "http://localhost:37001", + "description": "Local Server" + } + ], + "info": { + "version": "3.0.0", + "title": "@samchon/bbs-backend", + "description": "Backend for bbs", + "license": { + "name": "MIT" + } + }, + "paths": { + "/bbs/articles": { + "patch": { + "tags": [ + "BBS" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination and searching options.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated summarized articles.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIBbsArticle.ISummary" + } + } + } + } + }, + "summary": "List up all summarized articles", + "description": "List up all summarized articles.\n\nList up all summarized articles with pagination and searching options." + }, + "post": { + "tags": [ + "BBS" + ], + "parameters": [], + "requestBody": { + "description": "Article information to create.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created article.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle" + } + } + } + } + }, + "summary": "Create a new article", + "description": "Create a new article.\n\nCreate a new article with its first {@link IBbsArticle.ISnapshot snapshot}." + } + }, + "/bbs/articles/abridges": { + "patch": { + "tags": [ + "BBS" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination and searching options.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated abridged articles.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIBbsArticle.IAbridge" + } + } + } + } + }, + "summary": "List up all abridged articles", + "description": "List up all abridged articles.\n\nList up all abridged articles with pagination and searching options." + } + }, + "/bbs/articles/{id}": { + "get": { + "tags": [ + "BBS" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target article's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Article information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle" + } + } + } + } + }, + "summary": "Read individual article", + "description": "Read individual article.\n\nReads an article with its every {@link IBbsArticle.ISnapshot snapshots}." + }, + "put": { + "tags": [ + "BBS" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target article's ", + "required": true + } + ], + "requestBody": { + "description": "Article information to update.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly accumulated snapshot information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + } + } + } + } + }, + "summary": "Update an article", + "description": "Update an article.\n\nAccumulate a new {@link IBbsArticle.ISnapshot snapshot} record to the article." + }, + "delete": { + "tags": [ + "BBS" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target article's ", + "required": true + } + ], + "requestBody": { + "description": "Password of the article.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.IErase" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "" + } + }, + "summary": "Erase an article", + "description": "Erase an article.\n\nPerforms soft deletion to the article." + } + }, + "/bbs/articles/{articleId}/comments": { + "patch": { + "tags": [ + "BBS" + ], + "parameters": [ + { + "name": "articleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination and searching options.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticleComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated summarized comments.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIBbsArticleComment" + } + } + } + } + }, + "summary": "List up all summarized comments", + "description": "List up all summarized comments.\n\nList up all summarized comments with pagination and searching options." + }, + "post": { + "tags": [ + "BBS" + ], + "parameters": [ + { + "name": "articleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged article's ", + "required": true + } + ], + "requestBody": { + "description": "Comment information to create.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticleComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created comment.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticleComment" + } + } + } + } + }, + "summary": "Create a new comment", + "description": "Create a new comment.\n\nCreate a new comment with its first {@link IBbsArticleComment.ISnapshot snapshot}." + } + }, + "/bbs/articles/{articleId}/comments/{id}": { + "get": { + "tags": [ + "BBS" + ], + "parameters": [ + { + "name": "articleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged article's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target comment's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Comment information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticleComment" + } + } + } + } + }, + "summary": "Read individual comment", + "description": "Read individual comment.\n\nReads a comment with its every {@link IBbsArticleComment.ISnapshot snapshots}." + }, + "put": { + "tags": [ + "BBS" + ], + "parameters": [ + { + "name": "articleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged article's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target comment's ", + "required": true + } + ], + "requestBody": { + "description": "Comment information to update.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticleComment.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly accumulated snapshot information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticleComment.ISnapshot" + } + } + } + } + }, + "summary": "Update a comment", + "description": "Update a comment.\n\nAccumulate a new {@link IBbsArticleComment.ISnapshot snapshot} record to the comment." + }, + "delete": { + "tags": [ + "BBS" + ], + "parameters": [ + { + "name": "articleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged article's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target comment's ", + "required": true + } + ], + "requestBody": { + "description": "Password of the comment.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticleComment.IErase" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "" + } + }, + "summary": "Erase a comment", + "description": "Erase a comment.\n\nPerforms soft deletion to the comment." + } + }, + "/monitors/health": { + "get": { + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "description": "" + } + }, + "summary": "Health check API", + "description": "Health check API." + } + }, + "/monitors/performance": { + "get": { + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "description": "Performance info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPerformance" + } + } + } + } + }, + "summary": "Get performance information", + "description": "Get performance information.\n\nGet perofmration information composed with CPU, memory and resource usage." + } + }, + "/monitors/system": { + "get": { + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "description": "System info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ISystem" + } + } + } + } + }, + "summary": "Get system information", + "description": "Get system information.\n\nGet system information with commit and package information." + } + } + }, + "components": { + "schemas": { + "IBbsArticle.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IBbsArticle.IRequest.ISearch", + "title": "Search condition", + "description": "Search condition." + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-writer" + }, + { + "const": "-title" + }, + { + "const": "-created_at" + }, + { + "const": "-updated_at" + }, + { + "const": "+writer" + }, + { + "const": "+title" + }, + { + "const": "+created_at" + }, + { + "const": "+updated_at" + } + ] + }, + "title": "Sort condition", + "description": "Sort condition." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + }, + "IBbsArticle.IRequest.ISearch": { + "type": "object", + "properties": { + "writer": { + "type": "string" + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + }, + "description": "검색 정보." + }, + "IPageIBbsArticle.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticle.ISummary" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IPage.IPagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "IBbsArticle.ISummary": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "writer": { + "type": "string", + "title": "Writer of the article", + "description": "Writer of the article." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "id", + "writer", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the article." + }, + "IPageIBbsArticle.IAbridge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticle.IAbridge" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IBbsArticle.IAbridge": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "writer": { + "type": "string", + "title": "Writer of the article", + "description": "Writer of the article." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "$ref": "#/components/schemas/IBbsArticle.Format", + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "writer", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abriged information of the article." + }, + "IBbsArticle.Format": { + "oneOf": [ + { + "const": "txt" + }, + { + "const": "md" + }, + { + "const": "html" + } + ] + }, + "IAttachmentFile.ICreate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension." + }, + "extension": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "minLength": 1, + "maxLength": 8 + } + ], + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "IBbsArticle": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "writer": { + "type": "string", + "title": "Writer of article", + "description": "Writer of article." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "id", + "writer", + "snapshots", + "created_at" + ], + "description": "Article entity.\n\n`IBbsArticle* is a super-type entity of all kinds of articles in the current\nbackend system, literally shaping individual articles of the bulletin board.\n\nAnd, as you can see, the elements that must inevitably exist in the article,\nsuch as the `title` or the `body`, do not exist in the `IBbsArticle`, but exist\nin the subsidiary entity, {@link IBbsArticle.ISnapshot }, as a 1: N relationship,\nwhich is because a new snapshot record is published every time the article is\nmodified.\n\nThe reason why a new snapshot record is published every time the article is\nmodified is to preserve the evidence. Due to the nature of e-community, there\nis always a threat of dispute among the participants. And it can happen that\ndisputes arise through articles or {@link IBbsArticleComment comments}, and to\nprevent such things as modifying existing articles to manipulate the situation,\nthe article is designed in this structure.\n\nIn other words, to keep evidence, and prevent fraud." + }, + "IBbsArticle.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "$ref": "#/components/schemas/IBbsArticle.Format", + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files", + "title" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "IBbsArticle.ICreate": { + "type": "object", + "properties": { + "writer": { + "type": "string" + }, + "format": { + "oneOf": [ + { + "const": "txt" + }, + { + "const": "md" + }, + { + "const": "html" + } + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "password": { + "type": "string", + "title": "Password for modification", + "description": "Password for modification." + } + }, + "required": [ + "writer", + "format", + "title", + "body", + "files", + "password" + ], + "description": "Store content type of the article." + }, + "IBbsArticle.IUpdate": { + "type": "object", + "properties": { + "format": { + "oneOf": [ + { + "const": "txt" + }, + { + "const": "md" + }, + { + "const": "html" + } + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "password": { + "type": "string", + "title": "Password for modification", + "description": "Password for modification." + } + }, + "required": [ + "format", + "title", + "body", + "files", + "password" + ] + }, + "IBbsArticle.IErase": { + "type": "object", + "properties": { + "password": { + "type": "string" + } + }, + "required": [ + "password" + ] + }, + "IBbsArticleComment.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IBbsArticleComment.IRequest.ISearch" + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-writer" + }, + { + "const": "-created_at" + }, + { + "const": "+writer" + }, + { + "const": "+created_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + }, + "IBbsArticleComment.IRequest.ISearch": { + "type": "object", + "properties": { + "writer": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "IPageIBbsArticleComment": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticleComment" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IBbsArticleComment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "writer": { + "type": "string", + "title": "Writer of comment", + "description": "Writer of comment." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticleComment.ISnapshot" + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "id", + "parent_id", + "writer", + "snapshots", + "created_at" + ], + "description": "Comment written on an article.\n\n`IBbsArticleComment` is an entity that shapes the comments written on an article.\n\nAnd for this comment, as in the previous relationship between\n{@link IBbsArticle } and {@link IBbsArticle.ISnapshot }, the content body of the\ncomment is stored in the sub {@link IBbsArticleComment.ISnapshot } table for\nevidentialism, and a new snapshot record is issued every time the comment is modified.\n\nAlso, `IBbsArticleComment` is expressing the relationship of the hierarchical reply\nstructure through the {@link IBbsArticleComment.parent_id } attribute." + }, + "IBbsArticleComment.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "$ref": "#/components/schemas/IBbsArticleComment.Format", + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "IBbsArticleComment.Format": { + "oneOf": [ + { + "const": "txt" + }, + { + "const": "md" + }, + { + "const": "html" + } + ] + }, + "IBbsArticleComment.ICreate": { + "type": "object", + "properties": { + "writer": { + "type": "string", + "title": "Writer of comment", + "description": "Writer of comment." + }, + "format": { + "oneOf": [ + { + "const": "txt" + }, + { + "const": "md" + }, + { + "const": "html" + } + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "password": { + "type": "string", + "title": "Password for modification", + "description": "Password for modification." + } + }, + "required": [ + "writer", + "format", + "body", + "files", + "password" + ] + }, + "IBbsArticleComment.IUpdate": { + "type": "object", + "properties": { + "format": { + "oneOf": [ + { + "const": "txt" + }, + { + "const": "md" + }, + { + "const": "html" + } + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + }, + "password": { + "type": "string", + "title": "Password for modification", + "description": "Password for modification." + } + }, + "required": [ + "format", + "body", + "files", + "password" + ] + }, + "IBbsArticleComment.IErase": { + "type": "object", + "properties": { + "password": { + "type": "string" + } + }, + "required": [ + "password" + ] + }, + "IPerformance": { + "type": "object", + "properties": { + "cpu": { + "$ref": "#/components/schemas/process.global.NodeJS.CpuUsage" + }, + "memory": { + "$ref": "#/components/schemas/process.global.NodeJS.MemoryUsage" + }, + "resource": { + "$ref": "#/components/schemas/process.global.NodeJS.ResourceUsage" + } + }, + "required": [ + "cpu", + "memory", + "resource" + ] + }, + "process.global.NodeJS.CpuUsage": { + "type": "object", + "properties": { + "user": { + "type": "number" + }, + "system": { + "type": "number" + } + }, + "required": [ + "user", + "system" + ] + }, + "process.global.NodeJS.MemoryUsage": { + "type": "object", + "properties": { + "rss": { + "type": "number" + }, + "heapTotal": { + "type": "number" + }, + "heapUsed": { + "type": "number" + }, + "external": { + "type": "number" + }, + "arrayBuffers": { + "type": "number" + } + }, + "required": [ + "rss", + "heapTotal", + "heapUsed", + "external", + "arrayBuffers" + ] + }, + "process.global.NodeJS.ResourceUsage": { + "type": "object", + "properties": { + "fsRead": { + "type": "number" + }, + "fsWrite": { + "type": "number" + }, + "involuntaryContextSwitches": { + "type": "number" + }, + "ipcReceived": { + "type": "number" + }, + "ipcSent": { + "type": "number" + }, + "majorPageFault": { + "type": "number" + }, + "maxRSS": { + "type": "number" + }, + "minorPageFault": { + "type": "number" + }, + "sharedMemorySize": { + "type": "number" + }, + "signalsCount": { + "type": "number" + }, + "swappedOut": { + "type": "number" + }, + "systemCPUTime": { + "type": "number" + }, + "unsharedDataSize": { + "type": "number" + }, + "unsharedStackSize": { + "type": "number" + }, + "userCPUTime": { + "type": "number" + }, + "voluntaryContextSwitches": { + "type": "number" + } + }, + "required": [ + "fsRead", + "fsWrite", + "involuntaryContextSwitches", + "ipcReceived", + "ipcSent", + "majorPageFault", + "maxRSS", + "minorPageFault", + "sharedMemorySize", + "signalsCount", + "swappedOut", + "systemCPUTime", + "unsharedDataSize", + "unsharedStackSize", + "userCPUTime", + "voluntaryContextSwitches" + ] + }, + "ISystem": { + "type": "object", + "properties": { + "uid": { + "type": "number", + "title": "Random Unique ID", + "description": "Random Unique ID." + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "`process.argv`" + }, + "commit": { + "$ref": "#/components/schemas/ISystem.ICommit", + "title": "Git commit info", + "description": "Git commit info." + }, + "package": { + "$ref": "#/components/schemas/ISystem.IPackage", + "description": "`package.json`" + }, + "created_at": { + "type": "string", + "title": "Creation time of this server", + "description": "Creation time of this server." + } + }, + "required": [ + "uid", + "arguments", + "commit", + "package", + "created_at" + ], + "description": "System Information." + }, + "ISystem.ICommit": { + "type": "object", + "properties": { + "shortHash": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "hash": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "sanitizedSubject": { + "type": "string" + }, + "body": { + "type": "string" + }, + "author": { + "$ref": "#/components/schemas/ISystem.ICommit.IUser" + }, + "committer": { + "$ref": "#/components/schemas/ISystem.ICommit.IUser" + }, + "authored_at": { + "type": "string" + }, + "commited_at": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shortHash", + "branch", + "hash", + "subject", + "sanitizedSubject", + "body", + "author", + "committer", + "authored_at", + "commited_at", + "tags" + ], + "description": "Git commit info." + }, + "ISystem.ICommit.IUser": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "description": "Git user account info." + }, + "ISystem.IPackage": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "description": { + "type": "string" + }, + "main": { + "type": "string" + }, + "typings": { + "type": "string" + }, + "scripts": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "repository": { + "type": "object", + "properties": { + "type": { + "const": "git" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ] + }, + "author": { + "type": "string" + }, + "license": { + "type": "string" + }, + "bugs": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + }, + "required": [ + "url" + ] + }, + "homepage": { + "type": "string" + }, + "devDependencies": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "dependencies": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "publishConfig": { + "type": "object", + "properties": { + "registry": { + "type": "string" + } + }, + "required": [ + "registry" + ] + }, + "files": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "version", + "description", + "scripts", + "repository", + "author", + "license", + "bugs", + "homepage", + "dependencies" + ], + "description": "NPM package info." + }, + "Recordstringstring": { + "type": "object", + "properties": {}, + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } + } + } + }, + "tags": [ + { + "name": "BBS" + }, + { + "name": "Monitor" + } + ] +} \ No newline at end of file diff --git a/examples/swagger/clickhouse.json b/examples/swagger/clickhouse.json new file mode 100644 index 0000000..fd9f990 --- /dev/null +++ b/examples/swagger/clickhouse.json @@ -0,0 +1,2581 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "OpenAPI spec for ClickHouse Cloud", + "version": "1.0", + "contact": { + "name": "ClickHouse Support", + "url": "https://clickhouse.com/docs/en/cloud/manage/openapi?referrer=openapi-82913", + "email": "support@clickhouse.com" + } + }, + "servers": [ + { + "url": "https://api.clickhouse.cloud" + } + ], + "paths": { + "/v1/organizations": { + "get": { + "summary": "Get list of available organizations", + "description": "Returns a list with a single organization associated with the API key in the request.", + "parameters": [], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Organization" + } + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + } + }, + "/v1/organizations/:organizationId": { + "get": { + "summary": "Get organization details", + "description": "Returns details of a single organization. In order to get the details, the auth key must belong to the organization.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the requested organization.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/Organization" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + }, + "patch": { + "summary": "Update organization details", + "description": "Updates organization fields. Requires ADMIN auth key role.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization to update.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationPatchRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/Organization" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + } + }, + "/v1/organizations/:organizationId/services": { + "get": { + "summary": "List of organization services", + "description": "Returns a list of all services in the organization.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the requested organization.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Service" + } + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + }, + "post": { + "summary": "Create new service", + "description": "Creates a new service in the organization, and returns the current service state and a password to access the service. The service is started asynchronously.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization that will own the service.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServicePostRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/ServicePostResponse" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + } + }, + "/v1/organizations/:organizationId/services/:serviceId": { + "get": { + "summary": "Get service details", + "description": "Returns a service that belongs to the organization", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization that owns the service.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "Service ID", + "description": "ID of the requested service.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/Service" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + }, + "patch": { + "summary": "Update service basic details.", + "description": "Updates basic service details like service name or IP access list.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization that owns the service.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "Service ID", + "description": "ID of the service to update.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServicePatchRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/Service" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + }, + "delete": { + "summary": "Delete service.", + "description": "Deletes the service. The service must be in stopped state and is deleted asynchronously after this method call.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization that owns the service.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "Service ID", + "description": "ID of the service to delete.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ] + } + }, + "/v1/organizations/:organizationId/services/:serviceId/state": { + "patch": { + "summary": "Update service state.", + "description": "Starts or stop service", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization that owns the service.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "Service ID", + "description": "ID of the service to update state.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceStatePatchRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/Service" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + } + }, + "/v1/organizations/:organizationId/services/:serviceId/scaling": { + "patch": { + "summary": "Update service auto scaling settings.", + "description": "Updates minimum and maximum total memory limits and idle mode scaling behavior for the service. The memory settings are available only for \"production\" services and must be a multiple of 12 starting from 24GB.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization that owns the service.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "Service ID", + "description": "ID of the service to update scaling parameters.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceScalingPatchRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/Service" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + } + }, + "/v1/organizations/:organizationId/services/:serviceId/password": { + "patch": { + "summary": "Update service password.", + "description": "Sets a new password for the service", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization that owns the service.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "Service ID", + "description": "ID of the service to update password.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServicePasswordPatchRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/ServicePasswordPatchResponse" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + } + }, + "/v1/organizations/:organizationId/services/:serviceId/backups": { + "get": { + "summary": "List of service backups", + "description": "Returns a list of all backups for the service.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization that owns the backup.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "Service ID", + "description": "ID of the service the backup was created from.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Backup" + } + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + } + }, + "/v1/organizations/:organizationId/services/:serviceId/backups/:backupId": { + "get": { + "summary": "Get backup details", + "description": "Returns a single backup info.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization that owns the backup.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "Service ID", + "description": "ID of the service the backup was created from.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "Service backup ID", + "description": "ID of the requested backup.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/Backup" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + } + }, + "/v1/organizations/:organizationId/keys": { + "get": { + "summary": "Get list of all keys", + "description": "Returns a list of all keys in the organization.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the requested organization.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKey" + } + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + }, + "post": { + "summary": "Create key", + "description": "Creates new API key.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization that will own the key.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyPostRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/ApiKeyPostResponse" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + } + }, + "/v1/organizations/:organizationId/keys/:keyId": { + "get": { + "summary": "Get key details", + "description": "Returns a single key details.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the requested organization.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "API key ID", + "description": "ID of the requested key.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/ApiKey" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + }, + "patch": { + "summary": "Update key", + "description": "Updates API key properties.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization that owns the key.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "API key ID", + "description": "ID of the key to update.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyPatchRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/ApiKey" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + }, + "delete": { + "summary": "Delete key", + "description": "Deletes API key. Only a key not used to authenticate the active request can be deleted.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization that owns the key.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "API key ID", + "description": "ID of the key to delete.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ] + } + }, + "/v1/organizations/:organizationId/members": { + "get": { + "summary": "List organization members", + "description": "Returns a list of all members in the organization.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the requested organization.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Member" + } + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + } + }, + "/v1/organizations/:organizationId/members/:userId": { + "get": { + "summary": "Get member details", + "description": "Returns a single organization member details.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization the member is part of.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "User ID", + "description": "ID of the requested user.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/Member" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + }, + "patch": { + "summary": "Update organization member.", + "description": "Updates organization member role.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization the member is part of.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "User ID", + "description": "ID of the user to patch", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberPatchRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/Member" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + }, + "delete": { + "summary": "Remove an organization member", + "description": "Removes a user from the organization", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the requested organization.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "User ID", + "description": "ID of the requested user.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ] + } + }, + "/v1/organizations/:organizationId/invitations": { + "get": { + "summary": "List all invitations", + "description": "Returns list of all organization invitations.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the requested organization.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Invitation" + } + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + }, + "post": { + "summary": "Create an invitation", + "description": "Creates organization invitation.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization to invite a user to.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InvitationPostRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/Invitation" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + } + }, + "/v1/organizations/:organizationId/invitations/:invitationId": { + "get": { + "summary": "Get invitation details", + "description": "Returns details for a single organization invitation.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the requested organization.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "Organization invitation ID", + "description": "ID of the requested organization.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/Invitation" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + }, + "delete": { + "summary": "Delete organization invitation", + "description": "Deletes a single organization invitation.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the organization that has the invitation.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "Organization invitation ID", + "description": "ID of the requested organization.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ] + } + }, + "/v1/organizations/:organizationId/activities": { + "get": { + "summary": "List of organization activities", + "description": "Returns a list of all organization activities.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the requested organization.", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Activity" + } + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + } + }, + "/v1/organizations/:organizationId/activities/:activityId": { + "get": { + "summary": "Organization activity", + "description": "Returns a single organization activity by ID.", + "parameters": [ + { + "in": "path", + "name": "Organization ID", + "description": "ID of the requested organization.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "Activity ID", + "description": "ID of the requested activity.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/Activity" + }, + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 200 + }, + "requestId": { + "type": "string", + "description": "Unique id assigned to every request. UUIDv4", + "format": "uuid" + } + } + } + } + } + }, + "400": { + "description": "The server cannot or will not process the request due to something that is perceived to be a client error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "number", + "description": "HTTP status code.", + "example": 400 + }, + "error": { + "type": "string", + "description": "Detailed error description." + } + } + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "ServiceEndpoint": { + "properties": { + "protocol": { + "type": "string", + "description": "Endpoint protocol: 'https', 'nativesecure', 'mysql'.", + "enum": [ + "https", + "nativesecure", + "mysql" + ] + }, + "host": { + "type": "string", + "description": "Service host name" + }, + "port": { + "type": "number", + "description": "Numeric port" + } + } + }, + "IpAccessListEntry": { + "properties": { + "source": { + "type": "string", + "description": "IP or CIDR" + }, + "description": { + "type": "string", + "description": "IPv4 address or IPv4 CIDR to allow access from" + } + } + }, + "Service": { + "properties": { + "id": { + "type": "string", + "description": "Unique service ID.", + "format": "uuid" + }, + "name": { + "type": "string", + "description": "Name of the service." + }, + "provider": { + "type": "string", + "description": "Cloud provider", + "enum": [ + "aws", + "gcp" + ] + }, + "region": { + "type": "string", + "description": "Service region.", + "enum": [ + "ap-south-1", + "ap-southeast-1", + "eu-central-1", + "eu-west-1", + "us-east-1", + "us-east-2", + "us-west-2", + "ap-southeast-2", + "us-east1", + "us-central1", + "europe-west4", + "asia-southeast1" + ] + }, + "state": { + "type": "string", + "description": "Current state of the service.", + "enum": [ + "starting", + "stopping", + "terminating", + "provisioning", + "running", + "stopped", + "terminated", + "degraded", + "failed", + "idle" + ] + }, + "endpoints": { + "type": "array", + "description": "List of all service endpoints.", + "items": { + "$ref": "#/components/schemas/ServiceEndpoint" + } + }, + "tier": { + "type": "string", + "description": "Tier of the service: 'development', 'production', 'dedicated_high_mem', 'dedicated_high_cpu', 'dedicated_standard'. Production services scale, Development are fixed size.", + "enum": [ + "development", + "production", + "dedicated_high_mem", + "dedicated_high_cpu", + "dedicated_standard" + ] + }, + "minTotalMemoryGb": { + "type": "number", + "description": "Minimum total memory of all workers during auto-scaling in Gb. Available only for 'production' services. Must be a multiple of 12 and greater than 24.", + "minimum": 24, + "maximum": 720, + "multipleOf": 12, + "example": 48 + }, + "maxTotalMemoryGb": { + "type": "number", + "description": "Maximum total memory of all workers during auto-scaling in Gb. Available only for 'production' services. Must be a multiple of 12 and lower than 360 for non paid services or 720 for paid services.", + "minimum": 24, + "maximum": 720, + "multipleOf": 12, + "example": 360 + }, + "idleScaling": { + "type": "boolean", + "description": "When set to true the service is allowed to scale down to zero when idle. Always true for development services." + }, + "idleTimeoutMinutes": { + "type": "number", + "description": "Set minimum idling timeout (in minutes). Must be >= 5 minutes." + }, + "ipAccessList": { + "type": "array", + "description": "List of IP addresses allowed to access the service", + "items": { + "$ref": "#/components/schemas/IpAccessListEntry" + } + }, + "createdAt": { + "type": "string", + "description": "Service creation timestamp. ISO-8601.", + "format": "date-time" + } + } + }, + "IpAccessListPatch": { + "properties": { + "add": { + "type": "array", + "description": "Elements to add. Executed after \"remove\" part is processed.", + "items": { + "$ref": "#/components/schemas/IpAccessListEntry" + } + }, + "remove": { + "type": "array", + "description": "Elements to remove. Executed before \"add\" part is processed.", + "items": { + "$ref": "#/components/schemas/IpAccessListEntry" + } + } + } + }, + "Activity": { + "properties": { + "id": { + "type": "string", + "description": "Unique activity ID." + }, + "createdAt": { + "type": "string", + "description": "Timestamp of the activity. ISO-8601.", + "format": "date-time" + }, + "type": { + "type": "string", + "description": "Type of the activity.", + "enum": [ + "organization_update_name", + "organization_invite_create", + "organization_invite_delete", + "organization_member_join", + "organization_member_add", + "organization_member_leave", + "organization_member_delete", + "organization_member_update_role", + "key_create", + "key_delete", + "service_create", + "service_start", + "service_stop", + "service_delete", + "service_update_name", + "service_update_ip_access_list", + "service_update_autoscaling_memory", + "service_update_autoscaling_idling", + "service_update_password", + "backup_delete" + ] + }, + "actorType": { + "type": "string", + "description": "Type of the actor: 'user', 'support', 'system', 'api'.", + "enum": [ + "user", + "support", + "system", + "api" + ] + }, + "actorId": { + "type": "string", + "description": "Unique actor ID." + }, + "actorDetails": { + "type": "string", + "description": "Additional information about the actor." + }, + "actorIpAddress": { + "type": "string", + "description": "IP address of the actor. Defined for 'user' and 'api' actor types." + }, + "organizationId": { + "type": "string", + "description": "Scope of the activity: organization ID this activity is related to." + }, + "serviceId": { + "type": "string", + "description": "Scope of the activity: service ID this activity is related to." + } + } + }, + "Backup": { + "properties": { + "id": { + "type": "string", + "description": "Unique backup ID.", + "format": "uuid" + }, + "status": { + "type": "string", + "description": "Status of the backup: 'done', 'error', 'in_progress'.", + "enum": [ + "done", + "error", + "in_progress" + ] + }, + "serviceId": { + "type": "string", + "description": "Name " + }, + "startedAt": { + "type": "string", + "description": "Backup start timestamp. ISO-8601.", + "format": "date-time" + }, + "finishedAt": { + "type": "string", + "description": "Backup finish timestamp. ISO-8601. Available only for finished backups", + "format": "date-time" + } + } + }, + "Organization": { + "properties": { + "id": { + "type": "string", + "description": "Unique organization ID.", + "format": "uuid" + }, + "createdAt": { + "type": "string", + "description": "The timestamp the organization was created. ISO-8601.", + "format": "date-time" + }, + "name": { + "type": "string", + "description": "Name of the organization." + } + } + }, + "Member": { + "properties": { + "userId": { + "type": "string", + "description": "Unique user ID. If a user is a member in multiple organizations this ID will stay the same." + }, + "name": { + "type": "string", + "description": "Name of the member as set a personal user profile." + }, + "email": { + "type": "string", + "description": "Email of the member as set in personal user profile.", + "format": "email" + }, + "role": { + "type": "string", + "description": "Role of the member in the organization.", + "enum": [ + "admin", + "developer" + ] + }, + "joinedAt": { + "type": "string", + "description": "Timestamp the member joined the organization. ISO-8601.", + "format": "date-time" + } + } + }, + "Invitation": { + "properties": { + "role": { + "type": "string", + "description": "Role of the member in the organization.", + "enum": [ + "admin", + "developer" + ] + }, + "id": { + "type": "string", + "description": "Unique invitation ID.", + "format": "uuid" + }, + "email": { + "type": "string", + "description": "Email of the invited user. Only a user with this email can join using the invitation. The email is stored in a lowercase form.", + "format": "email" + }, + "createdAt": { + "type": "string", + "description": "Invitation creation timestamp. ISO-8601.", + "format": "date-time" + }, + "expireAt": { + "type": "string", + "description": "Timestamp the invitation expires. ISO-8601.", + "format": "date-time" + } + } + }, + "ApiKey": { + "properties": { + "id": { + "type": "string", + "description": "Unique API key ID.", + "format": "uuid" + }, + "name": { + "type": "string", + "description": "Name of the key" + }, + "state": { + "type": "string", + "description": "State of the key: 'enabled', 'disabled'.", + "enum": [ + "enabled", + "disabled" + ] + }, + "roles": { + "type": "array", + "description": "List of roles assigned to the key. Contains at least 1 element.", + "items": { + "type": "string", + "enum": [ + "admin", + "developer" + ] + } + }, + "keySuffix": { + "type": "string", + "description": "Last 4 letters of the key." + }, + "createdAt": { + "type": "string", + "description": "Timestamp the key was created. ISO-8601.", + "format": "date-time" + }, + "expireAt": { + "type": "string", + "description": "Timestamp the key expires. If not present or is empty the key never expires. ISO-8601.", + "format": "date-time" + }, + "usedAt": { + "type": "string", + "description": "Timestamp the key was used last time. If not present the key was never used. ISO-8601.", + "format": "date-time" + } + } + }, + "ApiKeyHashData": { + "properties": { + "keyIdHash": { + "type": "string", + "description": "Hash of the key ID. " + }, + "keyIdSuffix": { + "type": "string", + "description": "Last 4 digits of the key ID. Algorithm: echo -n \"yourpassword\" | sha256sum | tr -d '-' | xxd -r -p | base64" + }, + "keySecretHash": { + "type": "string", + "description": "Hash of the key secret. Algorithm: echo -n \"yourpassword\" | sha256sum | tr -d '-' | xxd -r -p | base64" + } + } + }, + "OrganizationPatchRequest": { + "properties": { + "name": { + "type": "string", + "description": "Name of the organization." + } + } + }, + "ServicePostRequest": { + "properties": { + "name": { + "type": "string", + "description": "Name of the service." + }, + "provider": { + "type": "string", + "description": "Cloud provider", + "enum": [ + "aws", + "gcp" + ] + }, + "region": { + "type": "string", + "description": "Service region.", + "enum": [ + "ap-south-1", + "ap-southeast-1", + "eu-central-1", + "eu-west-1", + "us-east-1", + "us-east-2", + "us-west-2", + "ap-southeast-2", + "us-east1", + "us-central1", + "europe-west4", + "asia-southeast1" + ] + }, + "tier": { + "type": "string", + "description": "Tier of the service: 'development', 'production', 'dedicated_high_mem', 'dedicated_high_cpu', 'dedicated_standard'. Production services scale, Development are fixed size.", + "enum": [ + "development", + "production", + "dedicated_high_mem", + "dedicated_high_cpu", + "dedicated_standard" + ] + }, + "ipAccessList": { + "type": "array", + "description": "List of IP addresses allowed to access the service", + "items": { + "$ref": "#/components/schemas/IpAccessListEntry" + } + }, + "minTotalMemoryGb": { + "type": "number", + "description": "Minimum total memory of all workers during auto-scaling in Gb. Available only for 'production' services. Must be a multiple of 12 and greater than 24.", + "minimum": 24, + "maximum": 720, + "multipleOf": 12, + "example": 48 + }, + "maxTotalMemoryGb": { + "type": "number", + "description": "Maximum total memory of all workers during auto-scaling in Gb. Available only for 'production' services. Must be a multiple of 12 and lower than 360 for non paid services or 720 for paid services.", + "minimum": 24, + "maximum": 720, + "multipleOf": 12, + "example": 360 + }, + "idleScaling": { + "type": "boolean", + "description": "When set to true the service is allowed to scale down to zero when idle. Always true for development services." + }, + "idleTimeoutMinutes": { + "type": "number", + "description": "Set minimum idling timeout (in minutes). Must be >= 5 minutes." + }, + "backupId": { + "type": "string", + "description": "Optional backup ID used as an initial state for the new service. When used the region and the tier of the new instance must be the same as the values of the original instance.", + "format": "uuid" + } + } + }, + "ServicePostResponse": { + "properties": { + "service": { + "$ref": "#/components/schemas/Service" + }, + "password": { + "type": "string", + "description": "Password for the newly created service." + } + } + }, + "ServicePatchRequest": { + "properties": { + "name": { + "type": "string", + "description": "Name of the service." + }, + "ipAccessList": { + "$ref": "#/components/schemas/IpAccessListPatch" + } + } + }, + "ServiceStatePatchRequest": { + "properties": { + "command": { + "type": "string", + "description": "Command to change the state: 'start', 'stop'.", + "enum": [ + "start", + "stop" + ] + } + } + }, + "ServiceScalingPatchRequest": { + "properties": { + "minTotalMemoryGb": { + "type": "number", + "description": "Minimum total memory of all workers during auto-scaling in Gb. Available only for 'production' services. Must be a multiple of 12 and greater than 24.", + "minimum": 24, + "maximum": 720, + "multipleOf": 12, + "example": 48 + }, + "maxTotalMemoryGb": { + "type": "number", + "description": "Maximum total memory of all workers during auto-scaling in Gb. Available only for 'production' services. Must be a multiple of 12 and lower than 360 for non paid services or 720 for paid services.", + "minimum": 24, + "maximum": 720, + "multipleOf": 12, + "example": 360 + }, + "idleScaling": { + "type": "boolean", + "description": "When set to true the service is allowed to scale down to zero when idle. Always true for development services." + }, + "idleTimeoutMinutes": { + "type": "number", + "description": "Set minimum idling timeout (in minutes). Must be >= 5 minutes." + } + } + }, + "ServicePasswordPatchRequest": { + "properties": { + "newPasswordHash": { + "type": "string", + "description": "Optional password hash. Used to avoid password transmission over network. If not provided a new password is generated and is provided in the response. Otherwise this hash is used. Algorithm: echo -n \"yourpassword\" | sha256sum | tr -d '-' | xxd -r -p | base64" + }, + "newDoubleSha1Hash": { + "type": "string", + "description": "Optional double SHA1 password hash for MySQL protocol. If newPasswordHash is not provided this key will be ignored and the generated password will be used. To enable this field please contact support as it is experimental. Algorithm: echo -n \"yourpassword\" | sha1sum | tr -d '-' | xxd -r -p | sha1sum | tr -d '-'" + } + } + }, + "ServicePasswordPatchResponse": { + "properties": { + "password": { + "type": "string", + "description": "New service password. Provided only if there was no 'newPasswordHash' in the request" + } + } + }, + "ApiKeyPostRequest": { + "properties": { + "name": { + "type": "string", + "description": "Name of the key." + }, + "expireAt": { + "type": "string", + "description": "Timestamp the key expires. If not present or is empty the key never expires. ISO-8601.", + "format": "date-time" + }, + "state": { + "type": "string", + "description": "Initial state of the key: 'enabled', 'disabled'. If not provided the new key will be 'enabled'.", + "enum": [ + "enabled", + "disabled" + ] + }, + "hashData": { + "$ref": "#/components/schemas/ApiKeyHashData" + }, + "roles": { + "type": "array", + "description": "List of roles assigned to the key. Contains at least 1 element.", + "items": { + "type": "string", + "enum": [ + "admin", + "developer" + ] + } + } + } + }, + "ApiKeyPostResponse": { + "properties": { + "key": { + "$ref": "#/components/schemas/ApiKey" + }, + "keyId": { + "type": "string", + "description": "Generated key ID. Provided only if there was no 'hashData' in the request." + }, + "keySecret": { + "type": "string", + "description": "Generated key secret. Provided only if there was no 'hashData' in the request." + } + } + }, + "ApiKeyPatchRequest": { + "properties": { + "name": { + "type": "string", + "description": "Name of the key" + }, + "roles": { + "type": "array", + "description": "List of roles assigned to the key. Contains at least 1 element.", + "items": { + "type": "string", + "enum": [ + "admin", + "developer" + ] + } + }, + "expireAt": { + "type": "string", + "description": "Timestamp the key expires. If not present or is empty the key never expires. ISO-8601.", + "format": "date-time" + }, + "state": { + "type": "string", + "description": "State of the key: 'enabled', 'disabled'.", + "enum": [ + "enabled", + "disabled" + ] + } + } + }, + "MemberPatchRequest": { + "properties": { + "role": { + "type": "string", + "description": "Role of the member in the organization.", + "enum": [ + "admin", + "developer" + ] + } + } + }, + "InvitationPostRequest": { + "properties": { + "email": { + "type": "string", + "description": "Email of the invited user. Only a user with this email can join using the invitation. The email is stored in a lowercase form.", + "format": "email" + }, + "role": { + "type": "string", + "description": "Role of the member in the organization.", + "enum": [ + "admin", + "developer" + ] + } + } + } + } + } + } \ No newline at end of file diff --git a/examples/swagger/fireblocks.json b/examples/swagger/fireblocks.json new file mode 100644 index 0000000..32ebdb1 --- /dev/null +++ b/examples/swagger/fireblocks.json @@ -0,0 +1,13598 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Fireblocks API", + "version": "1.0.0", + "contact": { + "email": "support@fireblocks.com" + } + }, + "servers": [ + { + "url": "https://api.fireblocks.io/v1" + } + ], + "x-readme": { + "explorer-enabled": false, + "samples-languages": [ + "curl", + "javascript", + "python" + ] + }, + "paths": { + "/vault/accounts": { + "get": { + "summary": "List vault accounts", + "description": "Gets all vault accounts in your workspace.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "vault_accounts = fireblocks.get_vault_accounts()", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const vaultAccounts = await fireblocks.getVaultAccounts();", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "query", + "name": "namePrefix", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "nameSuffix", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "minAmountThreshold", + "required": false, + "schema": { + "type": "number" + } + }, + { + "in": "query", + "name": "assetId", + "required": false, + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + } + ], + "responses": { + "200": { + "description": "A list of vault accounts", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VaultAccount" + } + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "post": { + "summary": "Create a new vault account", + "description": "Creates a new vault account with the requested name.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "vaultAccount = fireblocks.create_vault_account(name, hiddenOnUI, customer_ref_id, auto_fueling)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const vaultAccount = await fireblocks.createVaultAccount(name, hiddenOnUI, customerRefId, autoFueling);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "description": "Account Name", + "type": "string" + }, + "hiddenOnUI": { + "description": "Optional - if true, the created account and all related transactions will not be shown on Fireblocks console", + "type": "boolean" + }, + "customerRefId": { + "description": "Optional - Sets a customer reference ID", + "type": "string" + }, + "autoFuel": { + "description": "Optional - Sets the autoFuel property of the vault account", + "type": "boolean" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "A Vault Account object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/VaultAccount" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/accounts_paged": { + "get": { + "summary": "List vault acounts (Paginated)", + "description": "Gets all vault accounts in your workspace. This endpoint returns a limited amount of results with a quick response time.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "vault_accounts = fireblocks.get_vault_accounts_with_page_info(filters)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const vaultAccounts = await fireblocks.getVaultAccountsWithPageInfo(filters);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "query", + "name": "namePrefix", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "nameSuffix", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "minAmountThreshold", + "required": false, + "schema": { + "type": "number" + } + }, + { + "in": "query", + "name": "assetId", + "required": false, + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + }, + { + "in": "query", + "name": "orderBy", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "DESC" + } + }, + { + "in": "query", + "name": "before", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "after", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "number", + "minimum": 1, + "maximum": 500, + "default": 200 + } + } + ], + "responses": { + "200": { + "description": "A VaultAccountsPagedResponse object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/VaultAccountsPagedResponse" + } + } + } + } + } + } + }, + "/vault/accounts/{vaultAccountId}": { + "get": { + "summary": "Find a vault account by ID", + "description": "Returns the requested vault account.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "vault_account = fireblocks.get_vault_account(vault_account_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const vaultAccount = await fireblocks.getVaultAccount(vault_account_id);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The ID of the vault account to return type: string", + "schema": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + } + } + ], + "responses": { + "200": { + "description": "A Vault Account object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/VaultAccount" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "put": { + "summary": "Rename a vault account", + "description": "Renames the requested vault account.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "vaultAccount = fireblocks.update_vault_account(vault_account_id, name)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const vaultAccount = await fireblocks.updateVaultAccount(vautlAccountId, name);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The ID of the vault account to edit", + "schema": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "description": "Account Name", + "type": "string" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/asset_wallets": { + "get": { + "summary": "List asset wallets (Paginated)", + "description": "Gets all asset wallets at all of the vault accounts in your workspace. An asset wallet is an asset at a vault account. This method allows fast traversal of all account balances.\n**Note:**\n - This API endpoint is in limited availability and available for selected customers. If you would like to get early access to this endpoint, please reach out to [Fireblocks Support](https://support.fireblocks.io/hc/en-us/requests/new?ticket_form_id=36000337220)\n - This API call is subject to [rate limits](https://developers.fireblocks.com/reference/rate-limiting).\n", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "vault_accounts = fireblocks.get_asset_wallets(filters)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const vaultAccounts = await fireblocks.getAssetWallets(filters);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "query", + "name": "totalAmountLargerThan", + "description": "When specified, only asset wallets with total balance larger than this amount are returned.", + "required": false, + "schema": { + "type": "number" + } + }, + { + "in": "query", + "name": "assetId", + "required": false, + "description": "When specified, only asset wallets cross vault accounts that have this asset ID are returned.", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + }, + { + "in": "query", + "name": "before", + "required": false, + "description": "Fetches the next paginated response before this element. This element is a cursor and is returned at the response of the previous page.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "after", + "required": false, + "description": "Fetches the next paginated response after this element. This element is a cursor and is returned at the response of the previous page.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "limit", + "required": false, + "description": "The maximum number of asset wallets in a single response. The default is 200 and the maximum is 1000.", + "schema": { + "type": "number", + "minimum": 1, + "maximum": 1000, + "default": 200 + } + } + ], + "responses": { + "200": { + "description": "A PaginatedAssetWalletResponse object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PaginatedAssetWalletResponse" + } + } + } + } + } + } + }, + "/vault/accounts/{vaultAccountId}/hide": { + "post": { + "summary": "Hide a vault account in the console", + "description": "Hides the requested vault account from the web console view.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "vaultAsset = fireblocks.hide_vault_account(vault_account_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const vaultAsset = await fireblocks.hideVaultAccount(vaultAccountId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The vault account to hide", + "schema": { + "type": "string", + "minimum": 1, + "format": "numeric", + "x-fb-entity": "vault_account" + } + } + ], + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/accounts/{vaultAccountId}/unhide": { + "post": { + "summary": "Unhide a vault account in the console", + "description": "Makes a hidden vault account visible in web console view.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "vaultAsset = fireblocks.unhide_vault_account(vault_account_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const vaultAsset = await fireblocks.unhideVaultAccount(vaultAccountId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The vault account to unhide", + "schema": { + "type": "string", + "minimum": 1, + "format": "numeric", + "x-fb-entity": "vault_account" + } + } + ], + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/accounts/{vaultAccountId}/{assetId}/activate": { + "post": { + "summary": "Activate a wallet in a vault account", + "description": "Initiates activation for a wallet in a vault account.", + "tags": [ + "Vaults" + ], + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The ID of the vault account to return, or 'default' for the default vault account", + "schema": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/CreateVaultAssetResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/accounts/{vaultAccountId}/set_customer_ref_id": { + "post": { + "summary": "Set an AML/KYT customer reference ID for a vault account", + "description": "Assigns an AML/KYT customer reference ID for the vault account.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "vaultAsset = fireblocks.set_vault_account_customer_ref_id(vault_account_id, customer_ref_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const vaultAsset = await fireblocks.setCustomerRefIdForVaultAccount(vaultAccountId, customerRefId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The vault account ID", + "schema": { + "type": "string", + "minimum": 1, + "format": "numeric", + "x-fb-entity": "vault_account" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "customerRefId": { + "description": "Customer reference ID", + "type": "string" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/accounts/{vaultAccountId}/set_auto_fuel": { + "post": { + "summary": "Turn autofueling on or off", + "description": "Sets the autofueling property of the vault account to enabled or disabled.", + "tags": [ + "Vaults" + ], + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The vault account ID", + "schema": { + "type": "string", + "minimum": 1, + "format": "numeric", + "x-fb-entity": "vault_account" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "autoFuel": { + "description": "Auto Fuel", + "type": "boolean" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/accounts/{vaultAccountId}/{assetId}": { + "get": { + "summary": "Get the asset balance for a vault account", + "description": "Returns a wallet for a specific asset of a vault account.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "vaultAsset = fireblocks.get_vault_account_asset(vault_account_id, asset_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const vaultAsset = await fireblocks.getVaultAccountAsset(vaultAccountId, assetId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The ID of the vault account to return", + "schema": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + } + ], + "responses": { + "200": { + "description": "A VaultAsset object", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/VaultAsset" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "post": { + "summary": "Create a new wallet", + "description": "Creates a wallet for a specific asset in a vault account.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "vaultAsset = fireblocks.create_vault_asset(vault_account_id, asset_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const vaultAsset = await fireblocks.createVaultAsset(vaultAccountId, assetId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The ID of the vault account to return, or 'default' for the default vault account", + "schema": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "properties": { + "eosAccountName": { + "description": "Optional - when creating an EOS wallet, the account name. If not provided, a random name will be generated", + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/CreateVaultAssetResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/accounts/{vaultAccountId}/{assetId}/balance": { + "post": { + "summary": "Refresh asset balance data", + "description": "Updates the balance of a specific asset in a vault account.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "vaultAsset = fireblocks.refresh_vault_asset_balance(vault_account_id, asset_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const vaultAsset = await fireblocks.refreshVaultAssetBalance(vaultAccountId, assetId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The ID of the vault account to return", + "schema": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + } + ], + "requestBody": { + "required": false, + "content": { + "*/*": { + "schema": { + "type": "object" + } + } + } + }, + "responses": { + "200": { + "description": "A VaultAsset object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/VaultAsset" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/accounts/{vaultAccountId}/{assetId}/addresses": { + "get": { + "summary": "Get asset addresses", + "description": "Lists all addresses for specific asset of vault account.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "depositAddresses = fireblocks.get_deposit_addresses(vault_account_id, asset_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const depositAddresses = await fireblocks.getDepositAddresses(vaultAccountId, assetId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The ID of the vault account to return", + "schema": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + } + ], + "responses": { + "200": { + "description": "A list of deposit addresses", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VaultWalletAddress" + } + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "post": { + "summary": "Create new asset deposit address", + "description": "Creates a new deposit address for an asset of a vault account.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "address = fireblocks.generate_new_address(vault_account_id, asset_id, description, customer_ref_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const address = await fireblocks.generateNewAddress(vaultAccountId, assetId, description, customerRefId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "description": "(Optional) Attach a description to the new address", + "type": "string" + }, + "customerRefId": { + "description": "Optional - Sets a customer reference ID", + "type": "string" + } + } + } + } + } + }, + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The ID of the vault account to return", + "schema": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + } + ], + "responses": { + "200": { + "description": "The created address", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/CreateAddressResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/accounts/{vaultAccountId}/{assetId}/max_spendable_amount": { + "get": { + "summary": "Get the maximum spendable amount in a single transaction.", + "description": "Get the maximum amount of a particular asset that can be spent in a single transaction from a specified vault account (UTXO assets only, with a limitation on number of inputs embedded). Send several transactions if you want to spend more than the maximum spendable amount.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "address = fireblocks.set_address_description(vault_account_id, asset_id, address, tag, description)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const address = await fireblocks.setAddressDescription(vaultAccountId, assetId, address, tag, description);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The ID of the vault account, or 'default' for the default vault account", + "schema": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + }, + { + "in": "query", + "name": "manualSignging", + "required": false, + "description": "False by default. The maximum number of inputs depends if the transaction will be signed by an automated co-signer server or on a mobile device.", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/accounts/{vaultAccountId}/{assetId}/addresses/{addressId}": { + "put": { + "summary": "Update address description", + "description": "Updates the description of an existing address of an asset in a vault account.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "address = fireblocks.set_address_description(vault_account_id, asset_id, address, tag, description)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const address = await fireblocks.setAddressDescription(vaultAccountId, assetId, address, tag, description);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "description": "The address description", + "type": "string" + } + } + } + } + } + }, + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The ID of the vault account", + "schema": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + }, + { + "in": "path", + "name": "addressId", + "required": true, + "description": "The address for which to add a description. For XRP, use
:, for all other assets, use only the address", + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/accounts/{vaultAccountId}/{assetId}/addresses/{addressId}/set_customer_ref_id": { + "post": { + "summary": "Assign AML customer reference ID", + "description": "Sets an AML/KYT customer reference ID for a specific address.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "vaultAsset = fireblocks.set_customer_ref_id_for_address(vault_account_id, asset_id, address_id, customer_ref_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const vaultAsset = await fireblocks.setCustomerRefIdForAddress(vaultAccountId, assetId, addressId, customerRefId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The ID of the vault account", + "schema": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + }, + { + "in": "path", + "name": "addressId", + "required": true, + "description": "The address for which to add a description. For XRP, use
:, for all other assets, use only the address", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "customerRefId": { + "description": "Customer reference ID", + "type": "string" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/accounts/{vaultAccountId}/{assetId}/addresses/{addressId}/create_legacy": { + "post": { + "summary": "Convert a segwit address to legacy format", + "description": "Converts an existing segwit address to the legacy format.", + "tags": [ + "Vaults" + ], + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The ID of the vault account", + "schema": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + }, + { + "in": "path", + "name": "addressId", + "required": true, + "description": "The segwit address to translate", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The created address", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/CreateAddressResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/accounts/{vaultAccountId}/{assetId}/unspent_inputs": { + "get": { + "summary": "Get UTXO unspent inputs information", + "description": "Returns unspent inputs information of an asset in a vault account.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "vaultAsset = fireblocks.get_unspent_inputs(vault_account_id, asset_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const vaultAsset = await fireblocks.getUnspentInputs(vaultAccountId, assetId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "description": "The ID of the vault account", + "schema": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + } + ], + "responses": { + "200": { + "description": "List of Unspent information per input", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UnspentInputsResponse" + } + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/public_key_info/": { + "get": { + "summary": "Get the public key information", + "description": "Gets the public key information based on derivation path and signing algorithm.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "pubKey = fireblocks.get_public_key_info(algorithm, derivation_path, compressed)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const PublicKeyInfoArgs = { algorithm: 'MPC_ECDSA_SECP256K1', derivationPath: '[44,0,0,0,0]' } const pubKey = await fireblocks.getPublicKeyInfo(PublicKeyInfoArgs);\n", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "query", + "name": "derivationPath", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "algorithm", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "compressed", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Public key information", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PublicKeyInformation" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/accounts/{vaultAccountId}/{assetId}/{change}/{addressIndex}/public_key_info": { + "get": { + "summary": "Get the public key for a vault account", + "description": "Gets the public key information for the vault account.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "pubKey = fireblocks.get_public_key_info_for_vault_account(asset_id, vault_account_id, change, address_index, compressed)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const PublicKeyInfoArgs = { assetId: 'ETH', vaultAccountId: 0, change: 0, addressIndex: 0, compressed: true } const pubKey = await fireblocks.getPublicKeyInfoForVaultAccount(PublicKeyInfoArgs);\n", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "vaultAccountId", + "required": true, + "schema": { + "type": "string", + "format": "numeric", + "x-fb-entity": "vault_account" + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + }, + { + "in": "path", + "name": "change", + "required": true, + "schema": { + "type": "number" + } + }, + { + "in": "path", + "name": "addressIndex", + "required": true, + "schema": { + "type": "number" + } + }, + { + "in": "query", + "name": "compressed", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Public Key Information", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PublicKeyInformation" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/assets": { + "get": { + "summary": "Get asset balance for chosen assets", + "description": "Gets the assets amount summary for all accounts or filtered accounts.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "assets_balance = fireblocks.get_vault_assets_balance(accout_name_prefix, account_name_suffix)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const assetsBalance = await fireblocks.getVaultAssetsBalance(accountNamePrefix, accountNameSuffix);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "query", + "name": "accountNamePrefix", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "accountNameSuffix", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Amount by asset", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VaultAsset" + } + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/vault/assets/{assetId}": { + "get": { + "summary": "Get vault balance by asset", + "description": "Gets the vault balance summary for an asset.", + "tags": [ + "Vaults" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "assets_balance = fireblocks.get_vault_balance_by_asset(asset_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const assetsBalance = await fireblocks.getVaultBalanceByAsset(assetId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "assetId", + "required": true, + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + } + ], + "responses": { + "200": { + "description": "Vault amount by asset", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/VaultAsset" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/exchange_accounts": { + "get": { + "summary": "List exchange accounts", + "description": "Returns all exchange accounts.", + "tags": [ + "Exchange accounts" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "exchangeAccounts = fireblocks.get_exchange_accounts()", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const exchangeAccounts = await fireblocks.getExchangeAccounts();", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "responses": { + "200": { + "description": "An ExchangeAccount object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExchangeAccount" + } + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/exchange_accounts/{exchangeAccountId}": { + "get": { + "summary": "Find a specific exchange account", + "description": "Returns an exchange account by ID.", + "tags": [ + "Exchange accounts" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "exchangeAccount = fireblocks.get_exchange_account(exchangeAccountId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const exchnageAccount = await fireblocks.get_exchange_account(exchangeAccountId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "exchangeAccountId", + "required": true, + "description": "The ID of the exchange account to return", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "An ExchangeAccount object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ExchangeAccount" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/exchange_accounts/{exchangeAccountId}/internal_transfer": { + "post": { + "summary": "Internal tranfer for exchange accounts", + "description": "Transfers funds between trading accounts under the same exchange account.", + "tags": [ + "Exchange accounts" + ], + "parameters": [ + { + "in": "path", + "name": "exchangeAccountId", + "required": true, + "description": "The ID of the exchange account to return", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "201": { + "description": "Transfer succeeded", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "asset": { + "type": "string" + }, + "amount": { + "type": "string" + }, + "sourceType": { + "$ref": "#/components/schemas/TradingAccountType" + }, + "destType": { + "$ref": "#/components/schemas/TradingAccountType" + } + } + } + } + } + } + } + }, + "/exchange_accounts/{exchangeAccountId}/convert": { + "post": { + "summary": "Convert exchange account funds from the source asset to the destination asset. Coinbase (USD to USDC, USDC to USD) and Bitso (MXN to USD) are supported conversions.", + "tags": [ + "Exchange accounts" + ], + "parameters": [ + { + "in": "path", + "name": "exchangeAccountId", + "required": true, + "description": "The ID of the exchange account. Please make sure the exchange supports conversions. To find the ID of your exchange account, use GET/exchange_accounts.", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Conversion successful", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "srcAsset": { + "type": "string", + "description": "Name of the source asset (must be in a currency that is supported for conversions in the selected exchange type that corresponds to your exchange ID)" + }, + "destAsset": { + "type": "string", + "description": "Name of the destination asset (must be in a currency that is supported for conversions in the selected exchange type that corresponds to your exchange ID)" + }, + "amount": { + "type": "number", + "description": "The amount to transfer (in the currency of the source asset)" + } + }, + "required": [ + "srcAsset", + "destAsset", + "amount" + ] + } + } + } + } + } + }, + "/exchange_accounts/{exchangeAccountId}/{assetId}": { + "get": { + "summary": "Find an asset for an exchange account", + "description": "Returns an asset for an exchange account.", + "tags": [ + "Exchange accounts" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "exchangeAsset = fireblocks.get_exchange_account_asset(exchangeAccountId, assetId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const exchangeAsset = await fireblocks.getExchangeAsset(exchangeAccountId, assetId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "exchangeAccountId", + "required": true, + "description": "The ID of the exchange account to return", + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset to return", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "An ExchangeAccountAsset object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ExchangeAsset" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/fiat_accounts": { + "get": { + "summary": "List fiat accounts", + "description": "Returns all fiat accounts.", + "tags": [ + "Fiat accounts" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "transactions = fireblocks.get_fiat_accounts()", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const transactions = await fireblocks.getFiatAccounts();", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "responses": { + "200": { + "description": "A fiat account object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FiatAccount" + } + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/fiat_accounts/{accountId}": { + "get": { + "summary": "Find a specific fiat account", + "description": "Returns a fiat account by ID.", + "tags": [ + "Fiat accounts" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "transactions = fireblocks.get_fiat_account_by_id(account_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const transactions = await fireblocks.getFiatAccountById(accountId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "accountId", + "required": true, + "description": "The ID of the fiat account to return", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "A fiat account object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/FiatAccount" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/fiat_accounts/{accountId}/redeem_to_linked_dda": { + "post": { + "summary": "Redeem funds to DDA", + "description": "Redeems funds to the linked DDA.", + "tags": [ + "Fiat accounts" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "transactions = fireblocks.redeem_to_linked_dda(account_id, amount)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const transactions = await fireblocks.redeemToLinkedDDA(accountId, amount);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "accountId", + "required": true, + "description": "The ID of the fiat account to use", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "201": { + "description": "Transfer succeeded", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "amount": { + "type": "number" + } + } + } + } + } + } + } + }, + "/fiat_accounts/{accountId}/deposit_from_linked_dda": { + "post": { + "summary": "Deposit funds from DDA", + "description": "Deposits funds from the linked DDA.", + "tags": [ + "Fiat accounts" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "transactions = fireblocks.deposit_from_linked_dda(account_id, amount)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const transactions = await fireblocks.depositFromLinkedDDA(accountId, amount);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "accountId", + "required": true, + "description": "The ID of the fiat account to use", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "201": { + "description": "Transfer succeeded", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "amount": { + "type": "number" + } + } + } + } + } + } + } + }, + "/network_connections": { + "get": { + "summary": "List network connections", + "description": "Returns all network connections.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n", + "tags": [ + "Network connections" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "network_connections = fireblocks.get_network_connections()", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const networkConnections = await fireblocks.getNetworkConnections();", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "responses": { + "200": { + "description": "A list of network connections", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NetworkConnectionResponse" + } + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "post": { + "summary": "Creates a new network connection", + "description": "Initiates a new network connection.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n", + "tags": [ + "Network connections" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkConnection" + } + } + } + }, + "responses": { + "201": { + "description": "A Network Connection object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/NetworkConnectionResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/network_connections/{connectionId}/set_routing_policy": { + "patch": { + "summary": "Update network connection routing policy.", + "description": "Updates an existing network connection's routing policy.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n", + "tags": [ + "Network connections" + ], + "parameters": [ + { + "in": "path", + "name": "connectionId", + "required": true, + "description": "The ID of the network connection", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "routingPolicy": { + "$ref": "#/components/schemas/NetworkConnectionRoutingPolicy" + } + }, + "required": [ + "routingPolicy" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Network ID", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "properties": { + "success": { + "type": "boolean" + } + }, + "required": [ + "success" + ] + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/network_connections/{connectionId}/is_third_party_routing/{assetType}": { + "get": { + "summary": "Retrieve third-party network routing validation by asset type.", + "description": "The Fireblocks Network allows for flexibility around incoming deposits. A receiver can receive network deposits to locations other than Fireblocks. This endpoint validates whether future transactions are routed to the displayed recipient or to a 3rd party.", + "tags": [ + "Network connections" + ], + "parameters": [ + { + "in": "path", + "name": "connectionId", + "required": true, + "description": "The ID of the network connection", + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "in": "path", + "name": "assetType", + "required": true, + "description": "The destination asset type", + "schema": { + "type": "string", + "enum": [ + "CRYPTO", + "SIGNET", + "SEN", + "SIGNET_TEST", + "SEN_TEST" + ] + } + } + ], + "responses": { + "200": { + "description": "result for the validation", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "properties": { + "isThirdPartyRouting": { + "type": "boolean" + }, + "description": { + "type": "string" + } + } + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/network_connections/{connectionId}": { + "get": { + "summary": "Get a network connection", + "description": "Gets a network connection by ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n", + "tags": [ + "Network connections" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "network_connection = fireblocks.get_network_connection_by_id(connectionId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const network_connection = await fireblocks.getNetworkConnection(connectionId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "connectionId", + "required": true, + "description": "The ID of the connection", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "A network connection", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/NetworkConnectionResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "delete": { + "summary": "Deletes a network connection by ID", + "description": "Deletes an existing network connection specified by its connection ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n", + "tags": [ + "Network connections" + ], + "parameters": [ + { + "in": "path", + "name": "connectionId", + "required": true, + "description": "The ID of the network connection to delete", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Network ID", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "properties": { + "success": { + "type": "boolean" + } + }, + "required": [ + "success" + ] + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/network_ids": { + "get": { + "summary": "Returns all network IDs, both local IDs and discoverable remote IDs", + "description": "Retrieves a list of all local and discoverable remote network IDs.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n", + "tags": [ + "Network connections" + ], + "responses": { + "200": { + "description": "A list of network IDs", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "type": "array", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/NetworkIdResponse" + } + ] + } + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "post": { + "summary": "Creates a new Network ID", + "description": "Creates a new Network ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n", + "tags": [ + "Network connections" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "type": "string" + }, + "routingPolicy": { + "$ref": "#/components/schemas/NetworkIdRoutingPolicy" + } + }, + "required": [ + "name" + ] + } + } + } + }, + "responses": { + "201": { + "description": "Returns the new network ID in your workspace", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/NetworkIdResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/network_ids/{networkId}": { + "get": { + "summary": "Returns specific network ID.", + "description": "Retrieves a network by its ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n", + "tags": [ + "Network connections" + ], + "parameters": [ + { + "in": "path", + "name": "networkId", + "required": true, + "description": "The ID of the network", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Network ID", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/NetworkIdResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "delete": { + "summary": "Deletes specific network ID.", + "description": "Deletes a network by its ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n", + "tags": [ + "Network connections" + ], + "parameters": [ + { + "in": "path", + "name": "networkId", + "required": true, + "description": "The ID of the network", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Network ID", + "content": { + "*/*": { + "schema": { + "properties": { + "success": { + "type": "boolean" + } + }, + "required": [ + "success" + ] + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/network_ids/{networkId}/set_routing_policy": { + "patch": { + "summary": "Update network id routing policy.", + "description": "Updates the routing policy of a specified network ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n", + "tags": [ + "Network connections" + ], + "parameters": [ + { + "in": "path", + "name": "networkId", + "required": true, + "description": "The ID of the network", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "routingPolicy": { + "$ref": "#/components/schemas/NetworkIdRoutingPolicy" + } + }, + "required": [ + "routingPolicy" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Network ID", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "properties": { + "success": { + "type": "boolean" + } + }, + "required": [ + "success" + ] + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/network_ids/{networkId}/set_discoverability": { + "patch": { + "summary": "Update network ID's discoverability.", + "description": "Update whether or not the network ID is discoverable by others.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n", + "tags": [ + "Network connections" + ], + "parameters": [ + { + "in": "path", + "name": "networkId", + "required": true, + "description": "The ID of the network", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "isDiscoverable": { + "type": "boolean" + } + }, + "required": [ + "isDiscoverable" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Network ID", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "properties": { + "success": { + "type": "boolean" + } + }, + "required": [ + "success" + ] + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/network_ids/{networkId}/set_name": { + "patch": { + "summary": "Update network ID's name.", + "description": "Updates name of a specified network ID.\n\n**Note:** This API call is subject to Flexible Routing Schemes.\n\nYour routing policy defines how your transactions are routed.\nYou can choose 1 of the 3 different schemes mentioned below for each asset type:\n - **None**; Defines the profile routing to no destination for that asset type. Incoming transactions to asset types routed to `None` will fail.\n - **Custom**; Route to an account that you choose. If you remove the account, incoming transactions will fail until you choose another one.\n - **Default**; Use the routing specified by the network profile the connection is connected to. This scheme is also referred to as \"Profile Routing\"\n\nDefault Workspace Presets:\n - Network Profile Crypto → **Custom**\n - Network Profile FIAT → **None**\n - Network Connection Crypto → **Default**\n - Network Connection FIAT → **Default**\n\n - **Note**: By default, Custom routing scheme uses (`dstId` = `0`, `dstType` = `VAULT`).\n", + "tags": [ + "Network connections" + ], + "parameters": [ + { + "in": "path", + "name": "networkId", + "required": true, + "description": "The ID of the network", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "type": "string" + } + }, + "required": [ + "name" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Network ID", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "properties": { + "success": { + "type": "boolean" + } + }, + "required": [ + "success" + ] + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/internal_wallets": { + "get": { + "summary": "List internal wallets", + "tags": [ + "Internal wallets" + ], + "description": "Gets a list of internal wallets.\n\n**Note**: BTC-based assets belonging to whitelisted addresses cannot be retrieved between 00:00 UTC and 00:01 UTC daily due to third-party provider, Blockchair, being unavailable for this 60 second period. Please wait until the next minute to retrieve BTC-based assets.\n", + "responses": { + "200": { + "description": "A list of internal wallets", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UnmanagedWallet" + } + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "post": { + "summary": "Create an internal wallet", + "tags": [ + "Internal wallets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "internalWallet = fireblocks.create_internal_wallet(name, customer_ref_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const internalWallet = await fireblocks.createInternalWallet(name, customerRefId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "description": "Creates a new internal wallet with the requested name.", + "responses": { + "200": { + "description": "A new wallet object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/UnmanagedWallet" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "type": "string", + "description": "the wallet's display name" + }, + "customerRefId": { + "description": "Optional - Sets a customer reference ID", + "type": "string" + } + } + } + } + } + } + } + }, + "/internal_wallets/{walletId}": { + "get": { + "summary": "Get assets for internal wallet", + "tags": [ + "Internal wallets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "internalWallet = fireblocks.get_internal_wallet(walletId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const result = await fireblocks.getInternalWallet(walletId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "description": "Returns all assets in an internal wallet by ID.", + "parameters": [ + { + "in": "path", + "name": "walletId", + "required": true, + "description": "The ID of the wallet to return", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "A Wallet object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/UnmanagedWallet" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "delete": { + "summary": "Delete an internal wallet", + "tags": [ + "Internal wallets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "result = firebocks.delete_internal_wallet(walletId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const result = await fireblocks.deleteInternalWallet(walletId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "description": "Deletes an internal wallet by ID.", + "parameters": [ + { + "in": "path", + "name": "walletId", + "required": true, + "description": "The ID of the wallet to delete", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/internal_wallets/{walletId}/set_customer_ref_id": { + "post": { + "summary": "Set an AML/KYT customer reference ID for an internal wallet", + "tags": [ + "Internal wallets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "result = firebocks.set_customer_ref_id_for_internal_wallet(wallet_id, customer_ref_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const result = await fireblocks.setCustomerRefIdForInternalWallet(walletId, customerRefId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "description": "Sets an AML/KYT customer reference ID for the specific internal wallet.", + "parameters": [ + { + "in": "path", + "name": "walletId", + "required": true, + "description": "The wallet ID", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "customerRefId": { + "description": "Customer reference ID", + "type": "string" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/internal_wallets/{walletId}/{assetId}": { + "get": { + "summary": "Get an asset from an internal wallet", + "tags": [ + "Internal wallets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "internalWalletAsset = fireblocks.get_internal_wallet_asset(walletId, assetId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const internalWalletAsset = fireblocks.getInternalWalletAsset(walletId, assetId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "description": "Returns information for an asset in an internal wallet.", + "parameters": [ + { + "in": "path", + "name": "walletId", + "required": true, + "description": "The ID of the wallet", + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset to return", + "schema": { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset" + } + } + ], + "responses": { + "200": { + "description": "A Wallet Asset object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/WalletAsset" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "post": { + "summary": "Add an asset to an internal wallet", + "tags": [ + "Internal wallets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "internalWalletAsset = fireblocks.create_internal_wallet_asset(walletId, assetId, address, tag)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const internalWalletAsset = await fireblocks.createInternalWalletAsset(walletContainerId, assetId, address, tag);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "description": "Adds an asset to an existing internal wallet.", + "parameters": [ + { + "in": "path", + "name": "walletId", + "required": true, + "description": "The ID of the wallet", + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset to add", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + } + ], + "responses": { + "200": { + "description": "A Wallet Asset object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/WalletAsset" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "address": { + "type": "string", + "description": "The wallet's address or, for EOS wallets, the account name" + }, + "tag": { + "type": "string", + "description": "for XRP wallets, the destination tag; for EOS, the memo; for the fiat providers (BLINC by BCB Group), the Bank Transfer Description" + } + }, + "required": [ + "address" + ] + } + } + } + } + }, + "delete": { + "summary": "Delete a whitelisted address from an internal wallet", + "tags": [ + "Internal wallets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "result = fireblocks.delete_internal_wallet_asset(walletId, assetId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const result = await fireblocks.deleteInternalWalletAsset(walletId, assetId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "description": "Deletes a whitelisted address (for an asset) from an internal wallet.", + "parameters": [ + { + "in": "path", + "name": "walletId", + "required": true, + "description": "The ID of the wallet", + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset to delete", + "schema": { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset" + } + } + ], + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/external_wallets": { + "get": { + "summary": "List external wallets", + "description": "Gets a list of external wallets under the workspace.", + "tags": [ + "External wallets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "externalWallets = fireblocks.get_external_wallets()", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const externalWallets = await fireblocks.getExternalWallets();", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "responses": { + "200": { + "description": "A list of external wallets", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UnmanagedWallet" + } + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "post": { + "summary": "Create an external wallet", + "description": "Creates a new external wallet with the requested name.", + "tags": [ + "External wallets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "externalWallet = fireblocks.create_external_wallet(name, customer_ref_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const externalWallet = await fireblocks.createExternalWallet(name, customerRefId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "responses": { + "200": { + "description": "A Wallet object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/UnmanagedWallet" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "type": "string", + "description": "the wallet's display name" + }, + "customerRefId": { + "description": "Optional - Sets a customer reference ID", + "type": "string" + } + } + } + } + } + } + } + }, + "/external_wallets/{walletId}": { + "get": { + "summary": "Find an external wallet", + "description": "Returns an external wallet by ID.", + "tags": [ + "External wallets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "externalWallet = fireblocks.get_external_wallet(walletId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const externalWallet = await fireblocks.getExternalWallet(walletId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "walletId", + "required": true, + "description": "The ID of the wallet to return", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "A Wallet object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/UnmanagedWallet" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "delete": { + "summary": "Delete an external wallet", + "description": "Deletes an external wallet by ID.", + "tags": [ + "External wallets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "result = firebocks.delete_external_wallet(walletId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const result = await fireblocks.deleteExternalWallet(walletId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "walletId", + "required": true, + "description": "The ID of the wallet to delete", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/external_wallets/{walletId}/set_customer_ref_id": { + "post": { + "summary": "Set an AML customer reference ID for an external wallet", + "description": "Sets an AML/KYT customer reference ID for the specific external wallet.", + "tags": [ + "External wallets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "result = firebocks.set_customer_ref_id_for_external_wallet(wallet_id, customer_ref_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const result = await fireblocks.setCustomerRefIdForExternalWallet(walletId, customerRefId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "walletId", + "required": true, + "description": "The wallet ID", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "customerRefId": { + "description": "Customer reference ID", + "type": "string" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/external_wallets/{walletId}/{assetId}": { + "get": { + "summary": "Get an asset from an external wallet", + "description": "Returns an external wallet by wallet ID and asset ID.", + "tags": [ + "External wallets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "externalWalletAsset = fireblocks.get_external_wallet_asset(walletId, assetId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const externalWalletAsset = fireblocks.getExternalWalletAsset(walletId, assetId)", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "walletId", + "required": true, + "description": "The ID of the wallet", + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset to return", + "schema": { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset" + } + } + ], + "responses": { + "200": { + "description": "A Wallet Asset object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ExternalWalletAsset" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "post": { + "summary": "Add an asset to an external wallet.", + "description": "Adds an asset to an existing external wallet.", + "tags": [ + "External wallets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "externalWalletAsset = fireblocks.create_external_wallet_asset(walletId, assetId, address, tag)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const externalWalletAsset = await fireblocks.createExternalWalletAsset(walletContainerId, assetId, address, tag);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "walletId", + "required": true, + "description": "The ID of the wallet", + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset to add", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + } + ], + "responses": { + "200": { + "description": "A Wallet Asset object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ExternalWalletAsset" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "properties": { + "address": { + "type": "string", + "description": "The wallet's address (or xpub) of the wallet" + }, + "tag": { + "type": "string", + "description": "For XRP wallets, the destination tag; for EOS/XLM, the memo; for the fiat providers (BLINC by BCB Group), the Bank Transfer Description" + } + }, + "required": [ + "address" + ] + }, + { + "properties": { + "additionalInfo": { + "type": "object", + "oneOf": [ + { + "properties": { + "accountHolderGivenName": { + "type": "string" + }, + "accountHolderSurname": { + "type": "string" + }, + "accountHolderCity": { + "type": "string" + }, + "accountHolderCountry": { + "type": "string" + }, + "accountHolderAddress1": { + "type": "string" + }, + "accountHolderAddress2": { + "type": "string" + }, + "accountHolderDistrict": { + "type": "string" + }, + "accountHolderPostalCode": { + "type": "string" + }, + "iban": { + "type": "string" + }, + "ibanCity": { + "type": "string" + }, + "ibanCountry": { + "type": "string" + } + }, + "required": [ + "accountHolderGivenName", + "accountHolderCity", + "accountHolderCountry", + "accountHolderAddress1", + "accountHolderPostalCode", + "iban", + "ibanCity", + "ibanCountry" + ] + }, + { + "properties": { + "accountHolderGivenName": { + "type": "string" + }, + "accountHolderSurname": { + "type": "string" + }, + "accountHolderCity": { + "type": "string" + }, + "accountHolderCountry": { + "type": "string" + }, + "accountHolderAddress1": { + "type": "string" + }, + "accountHolderAddress2": { + "type": "string" + }, + "accountHolderDistrict": { + "type": "string" + }, + "accountHolderPostalCode": { + "type": "string" + }, + "abaRoutingNumber": { + "type": "string" + }, + "abaAccountNumber": { + "type": "string" + }, + "abaCountry": { + "type": "string" + } + }, + "required": [ + "accountHolderGivenName", + "accountHolderCity", + "accountHolderCountry", + "accountHolderAddress1", + "accountHolderPostalCode", + "abaRoutingNumber", + "abaAccountNumber", + "abaCountry" + ] + }, + { + "properties": { + "speiClabe": { + "type": "string" + }, + "speiName": { + "type": "string" + } + }, + "required": [ + "speiClabe" + ] + } + ] + } + }, + "required": [ + "additionalInfo" + ] + } + ] + } + } + } + } + }, + "delete": { + "summary": "Delete an asset from an external wallet", + "description": "Deletes an external wallet asset by ID.", + "tags": [ + "External wallets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "result = fireblocks.delete_external_wallet_asset(walletId, assetId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const result = await fireblocks.deleteExternalWalletAsset(walletId, assetId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "walletId", + "required": true, + "description": "The ID of the wallet", + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset to delete", + "schema": { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset" + } + } + ], + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/contracts": { + "get": { + "summary": "List contracts", + "description": "Gets a list of contracts.", + "tags": [ + "Contracts" + ], + "responses": { + "200": { + "description": "A list of contracts", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UnmanagedWallet" + } + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "post": { + "summary": "Create a contract", + "description": "Creates a new contract.", + "tags": [ + "Contracts" + ], + "responses": { + "200": { + "description": "A Wallet object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/UnmanagedWallet" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "type": "string", + "description": "the contract's display name" + } + } + } + } + } + } + } + }, + "/contracts/{contractId}": { + "get": { + "summary": "Find a specific contract", + "description": "Returns a contract by ID.", + "tags": [ + "Contracts" + ], + "parameters": [ + { + "in": "path", + "name": "contractId", + "required": true, + "description": "The ID of the contract to return", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "A Wallet object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/UnmanagedWallet" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "delete": { + "summary": "Delete a contract", + "description": "Deletes a contract by ID.", + "tags": [ + "Contracts" + ], + "parameters": [ + { + "in": "path", + "name": "contractId", + "required": true, + "description": "The ID of the contract to delete", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/contracts/{contractId}/{assetId}": { + "get": { + "summary": "Find a contract asset", + "description": "Returns a contract asset by ID.", + "tags": [ + "Contracts" + ], + "parameters": [ + { + "in": "path", + "name": "contractId", + "required": true, + "description": "The ID of the contract", + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset to return", + "schema": { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset" + } + } + ], + "responses": { + "200": { + "description": "A Wallet Asset object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ExternalWalletAsset" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "post": { + "summary": "Add an asset to a contract", + "description": "Adds an asset to an existing contract.", + "tags": [ + "Contracts" + ], + "parameters": [ + { + "in": "path", + "name": "contractId", + "required": true, + "description": "The ID of the contract", + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset to add", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + } + ], + "responses": { + "200": { + "description": "A Wallet Asset object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ExternalWalletAsset" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "properties": { + "address": { + "type": "string", + "description": "The contract's address (or xpub) of the wallet" + }, + "tag": { + "type": "string", + "description": "The destination tag, for XRP wallets" + } + }, + "required": [ + "address" + ] + } + } + } + } + }, + "delete": { + "summary": "Delete a contract asset", + "description": "Deletes a contract asset by ID.", + "tags": [ + "Contracts" + ], + "parameters": [ + { + "in": "path", + "name": "contractId", + "required": true, + "description": "The ID of the contract", + "schema": { + "type": "string", + "minimum": 1 + } + }, + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The ID of the asset to delete", + "schema": { + "type": "string", + "minimum": 1, + "x-fb-entity": "asset" + } + } + ], + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/supported_assets": { + "get": { + "summary": "List all asset types supported by Fireblocks", + "description": "Returns all asset types supported by Fireblocks.", + "tags": [ + "Blockchains & assets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "supportedAssets = fireblocks.get_supported_assets()", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const supportedAssets = await fireblocks.getSupportedAssets();", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "responses": { + "200": { + "description": "A Transaction object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AssetTypeResponse" + } + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/estimate_network_fee": { + "get": { + "summary": "Estimate the required fee for an asset", + "description": "Gets the estimated required fee for an asset. For UTXO based assets, the response will contain the suggested fee per byte, for ETH/ETC based assets, the suggested gas price, and for XRP/XLM, the transaction fee.", + "tags": [ + "Blockchains & assets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "fee_result = fireblocks.get_fee_for_asset(asset_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const feeResult = await fireblocks.getFeeForAsset(assetId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "query", + "name": "assetId", + "description": "The asset for which to estimate the fee", + "required": true, + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + } + ], + "responses": { + "200": { + "description": "Estimated fees response", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/EstimatedNetworkFeeResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/transactions/validate_address/{assetId}/{address}": { + "get": { + "summary": "Validate destination address", + "description": "Checks if an address is valid (for XRP, DOT, XLM, and EOS).", + "tags": [ + "Blockchains & assets" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "const result = await fireblocks.validate_address(assetID, address)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const result = await fireblocks.validateAddress(assetID, address)", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "assetId", + "required": true, + "description": "The asset of the address", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + }, + { + "in": "path", + "name": "address", + "required": true, + "description": "The address to validate", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "An Transaction object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ValidateAddressResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/transactions": { + "get": { + "summary": "List transaction history", + "description": "Lists the transaction history for your workspace.", + "tags": [ + "Transactions" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "transactions = fireblocks.get_transactions(status, after)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const transactions = await fireblocks.getTransactions({\n status: args.status,\nafter: from });\n", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "query", + "name": "before", + "description": "Unix timestamp in milliseconds. Returns only transactions created before the specified date", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "after", + "description": "Unix timestamp in milliseconds. Returns only transactions created after the specified date", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "status", + "description": "You can filter by one of the statuses.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "orderBy", + "description": "The field to order the results by\n\n**Note**: Ordering by a field that is not createdAt may result with transactions that receive updates as you request the next or previous pages of results, resulting with missing those transactions.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "createdAt", + "lastUpdated" + ] + } + }, + { + "in": "query", + "name": "sort", + "description": "The direction to order the results by", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ] + } + }, + { + "in": "query", + "name": "limit", + "description": "Limits the number of results. If not provided, a limit of 200 will be used. The maximum allowed limit is 500", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "default": 200 + } + }, + { + "in": "query", + "name": "sourceType", + "description": "The source type of the transaction", + "required": false, + "schema": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "FIAT_ACCOUNT", + "NETWORK_CONNECTION", + "COMPOUND", + "UNKNOWN", + "GAS_STATION", + "END_USER_WALLET" + ] + } + }, + { + "in": "query", + "name": "sourceId", + "description": "The source ID of the transaction", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "destType", + "description": "The destination type of the transaction", + "required": false, + "schema": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "FIAT_ACCOUNT", + "NETWORK_CONNECTION", + "COMPOUND", + "ONE_TIME_ADDRESS", + "END_USER_WALLET" + ] + } + }, + { + "in": "query", + "name": "destId", + "description": "The destination ID of the transaction", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "assets", + "description": "A list of assets to filter by, seperated by commas", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "txHash", + "description": "Returns only results with a specified txHash", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "sourceWalletId", + "description": "Returns only results where the source is a specific end user wallet", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "destWalletId", + "description": "Returns only results where the destination is a specific end user wallet", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "A list of transactions", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + }, + "next-page": { + "$ref": "#/components/headers/next-page" + }, + "prev-page": { + "$ref": "#/components/headers/prev-page" + } + }, + "content": { + "*/*": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TransactionResponse" + } + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "post": { + "summary": "Create a new transaction", + "description": "Creates a new transaction.", + "tags": [ + "Transactions" + ], + "parameters": [ + { + "in": "header", + "name": "X-End-User-Wallet-Id", + "schema": { + "$ref": "#/components/headers/X-End-User-Wallet-Id" + } + } + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "tx_result = client.create_transaction( asset_id=\"BTC\", amount=\"50\", source=TransferPeerPath(VAULT_ACCOUNT, from_vault_account_id), destination=DestinationTransferPeerPath(VAULT_ACCOUNT, to_vault_account_id) )\n", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const payload: TransactionArguments = { assetId: asset, source: { type: sourceType, id: sourceId || 0 }, destination: { type: destinationType, id: String(destinationId) }, amount: String(amount), fee: String(fee), note: \"Created by fireblocks SDK\" }; const result = await fireblocks.createTransaction(payload);\n", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "responses": { + "200": { + "description": "A transaction object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/CreateTransactionResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TransactionRequest" + } + } + } + } + } + }, + "/transactions/estimate_fee": { + "post": { + "summary": "Estimate transaction fee", + "description": "Estimates the transaction fee for a transaction request.\n* Note: Supports all Fireblocks assets except ZCash (ZEC).", + "tags": [ + "Transactions" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "estimated_fee = client.estimate_fee_for_transaction( asset_id=\"BTC\", amount=\"50\", source=TransferPeerPath(VAULT_ACCOUNT, from_vault_account_id), destination=DestinationTransferPeerPath(VAULT_ACCOUNT, to_vault_account_id) )\n", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const payload: TransactionArguments = { assetId: asset, source: { type: sourceType, id: sourceId || 0 }, destination: { type: destinationType, id: String(destinationId) }, amount: Number(amount) }; const estimatedFee = await fireblocks.estimateFeeForTransaction(payload);\n", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TransactionRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Estimated fees response", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/EstimatedTransactionFeeResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/transactions/{txId}": { + "get": { + "summary": "Find a specific transaction by Fireblocks transaction ID", + "description": "Returns a transaction by ID.", + "tags": [ + "Transactions" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "tx = fireblocks.get_transaction_by_id(txId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const tx = await fireblocks.getTransactionById(txId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "txId", + "required": true, + "example": "00000000-0000-0000-0000-000000000000", + "description": "The ID of the transaction to return", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "An Transaction object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/TransactionResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/Error" + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/transactions/external_tx_id/{externalTxId}/": { + "get": { + "summary": "Find a specific transaction by external transaction ID", + "description": "Returns transaction by external transaction ID.", + "tags": [ + "Transactions" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "tx = fireblocks.get_transaction_by_external_tx_id(externalTxId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const tx = await fireblocks.getTransactionByExternalTxId(externalTxId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "externalTxId", + "example": "00000000-0000-0000-0000-000000000000", + "required": true, + "description": "The external ID of the transaction to return", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "An Transaction object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/TransactionResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/transactions/{txId}/set_confirmation_threshold": { + "post": { + "summary": "Set confirmation threshold by transaction ID", + "description": "Overrides the required number of confirmations for transaction completion by transaction ID.", + "tags": [ + "Transactions" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "set_conf_threshold = client.set_confirmation_threshold_by_tx_id(body)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const setConfThreshold = await fireblocks.setConfirmationThresholdByTxId(body);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetConfirmationsThresholdRequest" + } + } + } + }, + "parameters": [ + { + "in": "path", + "name": "txId", + "required": true, + "description": "The ID of the transaction", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Set successfully", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SetConfirmationsThresholdResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/transactions/{txId}/drop": { + "post": { + "summary": "Drop ETH transaction by ID", + "description": "Drops a stuck ETH transaction and creates a replacement transaction.", + "tags": [ + "Transactions" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "result = fireblocks.drop_transaction(txId, fee_level)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const result = await fireblocks.dropTransaction(txId, feeLevel);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DropTransactionRequest" + } + } + } + }, + "parameters": [ + { + "in": "header", + "name": "X-End-User-Wallet-Id", + "schema": { + "$ref": "#/components/headers/X-End-User-Wallet-Id" + } + }, + { + "in": "path", + "name": "txId", + "required": true, + "description": "The ID of the transaction", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Created successfully", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/DropTransactionResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/transactions/{txId}/cancel": { + "post": { + "summary": "Cancel a transaction", + "description": "Cancels a transaction by ID.", + "tags": [ + "Transactions" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "result = fireblocks.cancel_transaction_by_id(txId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const result = await fireblocks.cancelTransactionById(txId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "header", + "name": "X-End-User-Wallet-Id", + "schema": { + "$ref": "#/components/headers/X-End-User-Wallet-Id" + } + }, + { + "in": "path", + "name": "txId", + "required": true, + "description": "The ID of the transaction to cancel", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "An Transaction object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/CancelTransactionResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/transactions/{txId}/freeze": { + "post": { + "summary": "Freeze a transaction", + "description": "Freezes a transaction by ID.", + "tags": [ + "Transactions" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "result = fireblocks.freeze_transaction(txId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const result = await fireblocks.freezeTransaction(txId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "header", + "name": "X-End-User-Wallet-Id", + "schema": { + "$ref": "#/components/headers/X-End-User-Wallet-Id" + } + }, + { + "in": "path", + "name": "txId", + "required": true, + "description": "The ID of the transaction to freeze", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "freeze response", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/FreezeTransactionResponse" + } + } + } + } + } + } + }, + "/transactions/{txId}/unfreeze": { + "post": { + "summary": "Unfreeze a transaction", + "description": "Unfreezes a transaction by ID and makes the transaction available again.", + "tags": [ + "Transactions" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "result = fireblocks.unfreeze_transaction(txId)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const result = await fireblocks.unfreezeTransaction(txId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "header", + "name": "X-End-User-Wallet-Id", + "schema": { + "$ref": "#/components/headers/X-End-User-Wallet-Id" + } + }, + { + "in": "path", + "name": "txId", + "required": true, + "description": "The ID of the transaction to unfreeze", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "Unfreeze response", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/UnfreezeTransactionResponse" + } + } + } + } + } + } + }, + "/txHash/{txHash}/set_confirmation_threshold": { + "post": { + "summary": "Set confirmation threshold by transaction hash", + "description": "Overrides the required number of confirmations for transaction completion by transaction hash.", + "tags": [ + "Transactions" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "set_conf_threshold = client.set_confirmation_threshold_by_tx_hash(body)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const setConfThreshold = await fireblocks.setConfirmationThresholdByTxHash(body);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetConfirmationsThresholdRequest" + } + } + } + }, + "parameters": [ + { + "in": "path", + "name": "txHash", + "required": true, + "description": "The TxHash", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "A list of transactions affected by the change", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SetConfirmationsThresholdResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/payments/xb-settlements/configs": { + "post": { + "tags": [ + "Payments - cross-border settlement" + ], + "summary": "Create a new cross-border settlement configuration", + "description": "Create a new cross-border settlement configuration.
Configurations define the default assets, on-ramps, and off-ramps to use for the cross-border settlement.
\nA configuration must contain at least two steps - `ON_RAMP` and `VAULT_ACCOUNT`.
\nAll other steps (e.g., `OFF_RAMP`, `FIAT_DESTINATION`, etc.) are optional.
\nEvery step must include the `accountId` to be used, while `inputAssetId` and `outputAssetId` are optional. \nIf those are not provided, a default value will be used from the Corridor Settings.
\nIf the inputAssetId or the outputAssetId is provided for one of the objects, all assets in the objects must be consistent. For example, if the output asset of ON_RAMP is XLM_USDC_5F3T, then the input asset of the VAULT_ACCOUNT must also be XLM_USDC_5F3T..
\nYou can set a slippage amount for your configuration. Slippage is defined by basis points (bps). This value can be overloaded on execution. If you do not configure a slippage amount, the default slippage of 10000 bps (10%) is used.
\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/XBSettlementConfigCreationRequestBody" + }, + "example": { + "name": "Flow Config Example", + "corridorId": "CO_US", + "steps": { + "ON_RAMP": { + "accountId": "3b7a1451-3453-4c96-a6a5-683cc8971d04" + }, + "VAULT_ACCOUNT": { + "accountId": "2" + }, + "OFF_RAMP": { + "accountId": "f2f74204-93ec-4614-870a-4ea2ad13aa0b" + } + }, + "conversionSlippageBasisPoints": 75 + } + } + } + }, + "responses": { + "200": { + "description": "Cross-border settlement configuration created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/XBSettlementConfigCreationResponse" + }, + "example": { + "configId": "074791cc-ef32-4920-8373-95efbeea66c5", + "corridorId": "CO_US", + "name": "Flow Config Example", + "steps": { + "ON_RAMP": { + "accountId": "3b7a1451-3453-4c96-a6a5-683cc8971d04", + "inputAssetId": "COP", + "outputAssetId": "USD" + }, + "VAULT_ACCOUNT": { + "accountId": "2", + "inputAssetId": "XLM_USDC_5F3T", + "outputAssetId": "XLM_USDC_5F3T" + }, + "OFF_RAMP": { + "accountId": "f2f74204-93ec-4614-870a-4ea2ad13aa0b", + "inputAssetId": "XLM_USDC_5F3T", + "outputAssetId": "XLM_USDC_5F3T" + } + }, + "conversionSlippageBasisPoints": 75, + "createdAt": 1680625226267 + } + } + } + }, + "400": { + "description": "Error creating cross-border request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized. Missing / invalid JWT token in Authorization header.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "5XX": { + "description": "Internal error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "get": { + "tags": [ + "Payments - cross-border settlement" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "summary": "Get all the cross-border settlement configurations", + "description": "Get all the cross-border settlement configurations.
\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n", + "responses": { + "200": { + "description": "Returns all the cross-border settlement configurations", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/XBSettlementGetAllConfigsResponse" + }, + "example": { + "configurations": [ + { + "configId": "074791cc-ef32-4920-8373-95efbeea66c5", + "corridorId": "CO_US", + "name": "Flow Config Example", + "steps": { + "ON_RAMP": { + "accountId": "3b7a1451-3453-4c96-a6a5-683cc8971d04", + "inputAssetId": "COP", + "outputAssetId": "USD" + }, + "VAULT_ACCOUNT": { + "accountId": "2", + "inputAssetId": "XLM_USDC_5F3T", + "outputAssetId": "XLM_USDC_5F3T" + }, + "OFF_RAMP": { + "accountId": "f2f74204-93ec-4614-870a-4ea2ad13aa0b", + "inputAssetId": "XLM_USDC_5F3T", + "outputAssetId": "XLM_USDC_5F3T" + } + }, + "conversionSlippageBasisPoints": 75, + "createdAt": 1680625226267 + }, + { + "configId": "a4b0a706-4578-4467-bd5b-a852761dd2aa", + "corridorId": "MX_US", + "name": "MX to US flow", + "steps": { + "ON_RAMP": { + "accountId": "3d6241ad-879b-4a11-842f-4cee9cd7fbba", + "inputAssetId": "MXN", + "outputAssetId": "USD" + }, + "VAULT_ACCOUNT": { + "accountId": "1", + "inputAssetId": "XLM_USDC_5F3T", + "outputAssetId": "XLM_USDC_5F3T" + }, + "OFF_RAMP": { + "accountId": "1cf7f750-117f-4c36-b4ef-14c420d118ce", + "inputAssetId": "XLM_USDC_5F3T", + "outputAssetId": "XLM_USDC_5F3T" + } + }, + "conversionSlippageBasisPoints": 10, + "createdAt": 1665166171134 + } + ] + } + } + } + }, + "401": { + "description": "Unauthorized. Missing / invalid JWT token in Authorization header.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "5XX": { + "description": "Internal error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/payments/xb-settlements/configs/{configId}": { + "get": { + "tags": [ + "Payments - cross-border settlement" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "summary": "Get a specific cross-border settlement configuration", + "description": "Get a specific cross-border settlement configuration.
\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n", + "parameters": [ + { + "in": "path", + "name": "configId", + "required": true, + "description": "The cross-border settlement configuration ID.", + "schema": { + "type": "string" + }, + "example": "074791cc-ef32-4920-8373-95efbeea66c5" + } + ], + "responses": { + "200": { + "description": "Returns the requested cross-border settlement configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/XBSettlementGetConfigResponse" + }, + "example": { + "configId": "074791cc-ef32-4920-8373-95efbeea66c5", + "corridorId": "CO_US", + "name": "Flow Config Example", + "steps": { + "ON_RAMP": { + "accountId": "3b7a1451-3453-4c96-a6a5-683cc8971d04", + "inputAssetId": "COP", + "outputAssetId": "USD" + }, + "VAULT_ACCOUNT": { + "accountId": "2", + "inputAssetId": "XLM_USDC_5F3T", + "outputAssetId": "XLM_USDC_5F3T" + }, + "OFF_RAMP": { + "accountId": "f2f74204-93ec-4614-870a-4ea2ad13aa0b", + "inputAssetId": "XLM_USDC_5F3T", + "outputAssetId": "XLM_USDC_5F3T" + } + }, + "conversionSlippageBasisPoints": 75, + "createdAt": 1680625226267 + } + } + } + }, + "401": { + "description": "Unauthorized. Missing / invalid JWT token in Authorization header.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No cross-border settlement configuration exists with the provided ID.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "5XX": { + "description": "Internal error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "put": { + "tags": [ + "Payments - cross-border settlement" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "summary": "Edit a cross-border settlement configuration", + "description": "Edit a cross-border settlement configuration.\nEditing a configuration does not affect previously executed flows that used the configuration.\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n", + "parameters": [ + { + "in": "path", + "name": "configId", + "required": true, + "description": "The cross-border settlement configuration ID.", + "schema": { + "type": "string" + }, + "example": "074791cc-ef32-4920-8373-95efbeea66c5" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/XBSettlementConfigEditRequestBody" + }, + "example": { + "name": "Flow Config Example - Edited", + "steps": { + "ON_RAMP": { + "accountId": "e9dec04a-3c57-4052-a89a-288c545f6430" + }, + "VAULT_ACCOUNT": { + "accountId": "2" + }, + "OFF_RAMP": { + "accountId": "f2f74204-93ec-4614-870a-4ea2ad13aa0b" + } + }, + "corridorId": "CO_US", + "conversionSlippageBasisPoints": 30 + } + } + } + }, + "responses": { + "200": { + "description": "Cross-border settlement configuration edited successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/XBSettlementConfigEditResponse" + }, + "example": { + "configId": "074791cc-ef32-4920-8373-95efbeea66c5", + "corridorId": "CO_US", + "name": "Flow Config Example - Edited", + "steps": { + "ON_RAMP": { + "accountId": "e9dec04a-3c57-4052-a89a-288c545f6430", + "inputAssetId": "COP", + "outputAssetId": "USD" + }, + "VAULT_ACCOUNT": { + "accountId": "2", + "inputAssetId": "XLM_USDC_5F3T", + "outputAssetId": "XLM_USDC_5F3T" + }, + "OFF_RAMP": { + "accountId": "f2f74204-93ec-4614-870a-4ea2ad13aa0b", + "inputAssetId": "XLM_USDC_5F3T", + "outputAssetId": "XLM_USDC_5F3T" + } + }, + "conversionSlippageBasisPoints": 30, + "createdAt": 1680625226267 + } + } + } + }, + "400": { + "description": "Error creating the cross-border request. Configuration not modified.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized. Missing / invalid JWT token in Authorization header.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No cross-border settlement configuration exists with the provided ID.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "5XX": { + "description": "Internal error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Payments - cross-border settlement" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "configId", + "required": true, + "description": "The cross-border settlement configuration ID.", + "schema": { + "type": "string" + }, + "example": "074791cc-ef32-4920-8373-95efbeea66c5" + } + ], + "summary": "Delete a cross-border settlement configuration", + "description": "Delete a cross-border settlement configuration.\nThis does not delete or remove previously executed flows that used this configuration.\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n", + "responses": { + "200": { + "description": "Cross-border settlement configuration deleted successfully. Returns the deleted configuration.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/XBSettlementConfigDeletionResponse" + }, + "example": { + "configId": "074791cc-ef32-4920-8373-95efbeea66c5", + "corridorId": "CO_US", + "name": "Flow Config Example - Edited", + "steps": { + "ON_RAMP": { + "accountId": "e9dec04a-3c57-4052-a89a-288c545f6430", + "inputAssetId": "COP", + "outputAssetId": "USD" + }, + "VAULT_ACCOUNT": { + "accountId": "2", + "inputAssetId": "XLM_USDC_5F3T", + "outputAssetId": "XLM_USDC_5F3T" + }, + "OFF_RAMP": { + "accountId": "f2f74204-93ec-4614-870a-4ea2ad13aa0b", + "inputAssetId": "XLM_USDC_5F3T", + "outputAssetId": "XLM_USDC_5F3T" + } + }, + "conversionSlippageBasisPoints": 30, + "createdAt": 1680625226267 + } + } + } + }, + "401": { + "description": "Unauthorized. Missing / invalid JWT token in Authorization header.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No cross-border settlement configuration exists with the provided ID.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "5XX": { + "description": "Internal error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/payments/xb-settlements/flows": { + "post": { + "tags": [ + "Payments - cross-border settlement" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "summary": "Create a new cross-border settlement flow", + "description": "Create a cross-border flow (based on a cross-border configuration) with an amount to transfer. \nThe assetId is defined by the cross-border configuration.\nCreating a flow triggers a calculation of the flow estimations, including FX rates, times, and fees based on the amount provided.\nCreating a cross-border flow will not execute the flow.\n\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/XBSettlementCreateFlowRequestBody" + }, + "example": { + "configId": "a4b0a706-4578-4467-bd5b-a852761dd2aa", + "amount": "100" + } + } + } + }, + "responses": { + "200": { + "description": "Cross-border settlement flow created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/XBSettlementCreateFlowResponse" + }, + "example": { + "flowId": "98fb5a8b-65ff-4f15-b89c-80910aedbfb3", + "configId": "a4b0a706-4578-4467-bd5b-a852761dd2aa", + "conversionRate": "0.05481268", + "inputAmount": { + "amount": "100", + "assetId": "MXN" + }, + "estimatedOutputAmount": { + "amount": "5.461268", + "assetId": "XLM_USDC_5F3T" + }, + "totalEstimatedFee": { + "amount": "0.063503", + "assetId": "XLM_USDC_5F3T" + }, + "steps": { + "ON_RAMP": { + "accountId": "3d6241ad-879b-4a11-842f-4cee9cd7fbba", + "inputAmount": { + "amount": "100", + "assetId": "MXN" + }, + "outputAmount": { + "amount": "5.48126865", + "assetId": "USD" + }, + "estimatedFeeAmount": { + "amount": "0.043503", + "assetId": "USD" + }, + "estimatedTime": 10, + "isSignRequired": false + }, + "VAULT_ACCOUNT": { + "accountId": "1", + "inputAmount": { + "amount": "5.48126865", + "assetId": "USD" + }, + "outputAmount": { + "amount": "5.471268", + "assetId": "XLM_USDC_5F3T" + }, + "estimatedFeeAmount": { + "amount": "0.01", + "assetId": "XLM_USDC_5F3T" + }, + "estimatedTime": 63, + "isSignRequired": true + }, + "OFF_RAMP": { + "accountId": "1cf7f750-117f-4c36-b4ef-14c420d118ce", + "inputAmount": { + "amount": "5.471268", + "assetId": "XLM_USDC_5F3T" + }, + "outputAmount": { + "amount": "5.461268", + "assetId": "XLM_USDC_5F3T" + }, + "estimatedFeeAmount": { + "amount": "0.01", + "assetId": "XLM_USDC_5F3T" + }, + "estimatedTime": 95, + "isSignRequired": true + } + }, + "totalEstimatedTime": 696 + } + } + } + }, + "400": { + "description": "Unable to create cross-border flow, invalid configuration ID.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized. Missing / invalid JWT token in Authorization header.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "5XX": { + "description": "Internal error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/payments/xb-settlements/flows/{flowId}": { + "get": { + "tags": [ + "Payments - cross-border settlement" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "flowId", + "required": true, + "description": "The cross-border settlement flow ID.", + "schema": { + "type": "string" + }, + "example": "98fb5a8b-65ff-4f15-b89c-80910aedbfb3" + } + ], + "summary": "Get specific cross-border settlement flow details", + "description": "Gets details for a specific cross-border settlement flow\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n", + "responses": { + "200": { + "description": "Returns cross-border settlement flow details.\nFor unexecuted flows, a preview object will return, showing the estimated time, amounts, and fees.\nNote that this data structure updates as the flow progresses, including the total fees (accumulated), state, and steps.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/XBSettlementGetFlowResponse" + }, + "examples": { + "not executed": { + "value": { + "preview": { + "flowId": "98fb5a8b-65ff-4f15-b89c-80910aedbfb3", + "configId": "a4b0a706-4578-4467-bd5b-a852761dd2aa", + "conversionRate": "0.055369", + "inputAmount": { + "amount": "32", + "assetId": "MXN" + }, + "estimatedOutputAmount": { + "amount": "1.741824", + "assetId": "XLM_USDC_5F3T" + }, + "totalEstimatedFee": { + "amount": "0.044063", + "assetId": "XLM_USDC_5F3T" + }, + "totalEstimatedTime": 831, + "steps": { + "ON_RAMP": { + "accountId": "3d6241ad-879b-4a11-842f-4cee9cd7fbba", + "inputAmount": { + "amount": "32", + "assetId": "MXN" + }, + "outputAmount": { + "amount": "1.77182407", + "assetId": "USD" + }, + "estimatedFeeAmount": { + "amount": "0.014063", + "assetId": "USD" + }, + "estimatedTime": 10, + "isSignRequired": false + }, + "VAULT_ACCOUNT": { + "accountId": "1", + "inputAmount": { + "amount": "1.77182407", + "assetId": "XLM_USDC_5F3T" + }, + "outputAmount": { + "amount": "1.761824", + "assetId": "XLM_USDC_5F3T" + }, + "estimatedFeeAmount": { + "amount": "0.01", + "assetId": "XLM_USDC_5F3T" + }, + "estimatedTime": 111, + "isSignRequired": true + }, + "OFF_RAMP": { + "accountId": "1cf7f750-117f-4c36-b4ef-14c420d118ce", + "inputAmount": { + "amount": "1.761824", + "assetId": "XLM_USDC_5F3T" + }, + "outputAmount": { + "amount": "1.751824", + "assetId": "XLM_USDC_5F3T" + }, + "estimatedFeeAmount": { + "amount": "0.01", + "assetId": "XLM_USDC_5F3T" + }, + "estimatedTime": 293, + "isSignRequired": true + } + } + } + } + }, + "in progress": { + "value": { + "execution": { + "flowId": "98fb5a8b-65ff-4f15-b89c-80910aedbfb3", + "configId": "a4b0a706-4578-4467-bd5b-a852761dd2aa", + "inputAmount": { + "amount": "32", + "assetId": "MXN" + }, + "outputAmount": { + "amount": "1.471824", + "assetId": "XLM_USDC_5F3T" + }, + "totalFee": { + "amount": "0.004415", + "assetId": "XLM_USDC_5F3T" + }, + "initiatedAt": 1684919822759, + "initiatedBy": "a92e87a0-5231-531e-a624-fb29c1283764", + "state": "PROCESSING", + "selectedConversionSlippage": { + "basisPoints": 10, + "reason": "FLOW" + }, + "steps": { + "ON_RAMP": { + "id": "c1863abf-e7fa-4f3a-908a-bcd6381f7eb4", + "accountId": "3d6241ad-879b-4a11-842f-4cee9cd7fbba", + "status": "COMPLETED", + "inputAmount": { + "amount": "32", + "assetId": "MXN" + }, + "outputAmount": { + "amount": "1.77182407", + "assetId": "USD" + }, + "fee": { + "amount": "0.014063", + "assetId": "USD" + }, + "startedAt": 1684919823052, + "completedAt": 1684919830456, + "isSignRequired": false + }, + "VAULT_ACCOUNT": { + "id": "2aa2634d-2bab-44ac-9b4e-36e2e4db5d49", + "accountId": "1", + "status": "COMPLETED", + "inputAmount": { + "amount": "1.77182407", + "assetId": "XLM_USDC_5F3T" + }, + "outputAmount": { + "amount": "1.761824", + "assetId": "XLM_USDC_5F3T" + }, + "fee": { + "amount": "0.01", + "assetId": "XLM" + }, + "startedAt": 1684919831385, + "completedAt": 1684920680227, + "isSignRequired": true + }, + "OFF_RAMP": { + "id": "b221ed63-a05c-4e78-b2f2-205dcffeabda", + "accountId": "1cf7f750-117f-4c36-b4ef-14c420d118ce", + "status": "PROCESSING", + "inputAmount": { + "amount": "1.761824", + "assetId": "XLM_USDC_5F3T" + }, + "startedAt": 1684920681088, + "isSignRequired": true + } + } + } + } + }, + "completed": { + "value": { + "execution": { + "flowId": "98fb5a8b-65ff-4f15-b89c-80910aedbfb3", + "configId": "a4b0a706-4578-4467-bd5b-a852761dd2aa", + "inputAmount": { + "amount": "32", + "assetId": "MXN" + }, + "outputAmount": { + "amount": "1.471824", + "assetId": "XLM_USDC_5F3T" + }, + "totalFee": { + "amount": "0.004415", + "assetId": "XLM_USDC_5F3T" + }, + "initiatedAt": 1684919822759, + "initiatedBy": "a92e87a0-5231-531e-a624-fb29c1283764", + "state": "COMPLETED", + "selectedConversionSlippage": { + "basisPoints": 10, + "reason": "FLOW" + }, + "steps": { + "ON_RAMP": { + "id": "b1bec144-c4dd-4ff8-80ed-4204c83dd422", + "accountId": "3d6241ad-879b-4a11-842f-4cee9cd7fbba", + "status": "COMPLETED", + "inputAmount": { + "amount": "32", + "assetId": "MXN" + }, + "outputAmount": { + "amount": "1.77182407", + "assetId": "USD" + }, + "fee": { + "amount": "0.014063", + "assetId": "USD" + }, + "startedAt": 1684919823052, + "completedAt": 1684919830456, + "isSignRequired": false + }, + "VAULT_ACCOUNT": { + "id": "df7e0103-04cf-4508-9654-aa5e4b90dd50", + "accountId": "1", + "status": "COMPLETED", + "inputAmount": { + "amount": "1.77182407", + "assetId": "XLM_USDC_5F3T" + }, + "outputAmount": { + "amount": "1.761824", + "assetId": "XLM_USDC_5F3T" + }, + "fee": { + "amount": "0.01", + "assetId": "XLM" + }, + "startedAt": 1684919831385, + "completedAt": 1684920680227, + "isSignRequired": true + }, + "OFF_RAMP": { + "id": "34c2d597-271a-4c11-937a-3c246f5d39c2", + "accountId": "1cf7f750-117f-4c36-b4ef-14c420d118ce", + "status": "COMPLETED", + "inputAmount": { + "amount": "1.761824", + "assetId": "XLM_USDC_5F3T" + }, + "outputAmount": { + "amount": "1.761823", + "assetId": "XLM_USDC_5F3T" + }, + "fee": { + "amount": "0.00001", + "assetId": "XLM" + }, + "startedAt": 1684920681088, + "completedAt": 1684921261453, + "isSignRequired": true + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Unauthorized. Missing / invalid JWT token in Authorization header.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Invalid flowId.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "5XX": { + "description": "Internal error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/payments/xb-settlements/flows/{flowId}/actions/execute": { + "post": { + "tags": [ + "Payments - cross-border settlement" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "flowId", + "required": true, + "description": "The cross-border settlement flow ID.", + "schema": { + "type": "string" + }, + "example": "98fb5a8b-65ff-4f15-b89c-80910aedbfb3" + } + ], + "summary": "Execute cross-border settlement flow", + "description": "Send a payment flow with 'flowId' for execution.\nIf a differet slippage configuraion is needed for this execution than configured in the flow configuration, the request body must define the desired slippage configuration for this execution.\n\n**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoint includes APIs available only for customers with the Payments Engine enabled on their accounts.\nThese endpoints are currently in beta and might be subject to changes.\nIf you want to learn more about the Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/XBSettlementFlowExecutionRequestBody" + }, + "example": { + "conversionSlippageBasisPoints": 10 + } + } + } + }, + "responses": { + "200": { + "description": "Cross-border settlement flow started to execute successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/XBSettlementFlowExecutionResponse" + }, + "example": { + "flowId": "98fb5a8b-65ff-4f15-b89c-80910aedbfb3", + "configId": "a4b0a706-4578-4467-bd5b-a852761dd2aa", + "inputAmount": { + "amount": "32", + "assetId": "MXN" + }, + "outputAmount": { + "amount": "1.471824", + "assetId": "XLM_USDC_5F3T" + }, + "totalFee": { + "amount": "0.004415", + "assetId": "XLM_USDC_5F3T" + }, + "initiatedAt": 1684919822759, + "initiatedBy": "a92e87a0-5231-531e-a624-fb29c1283764", + "state": "PROCESSING", + "selectedConversionSlippage": { + "basisPoints": 10, + "reason": "FLOW" + }, + "steps": { + "ON_RAMP": { + "id": "c1863abf-e7fa-4f3a-908a-bcd6381f7eb4", + "accountId": "3d6241ad-879b-4a11-842f-4cee9cd7fbba", + "status": "COMPLETED", + "inputAmount": { + "amount": "32", + "assetId": "MXN" + }, + "outputAmount": { + "amount": "1.77182407", + "assetId": "USD" + }, + "fee": { + "amount": "0.014063", + "assetId": "USD" + }, + "startedAt": 1684919823052, + "completedAt": 1684919830456, + "isSignRequired": false + }, + "VAULT_ACCOUNT": { + "id": "2aa2634d-2bab-44ac-9b4e-36e2e4db5d49", + "accountId": "1", + "status": "PROCESSING", + "inputAmount": { + "amount": "1.77182407", + "assetId": "XLM_USDC_5F3T" + }, + "outputAmount": { + "amount": "1.761824", + "assetId": "XLM_USDC_5F3T" + }, + "fee": { + "amount": "0.01", + "assetId": "XLM" + }, + "startedAt": 1684919831385, + "isSignRequired": true + }, + "OFF_RAMP": { + "id": "b221ed63-a05c-4e78-b2f2-205dcffeabda", + "accountId": "1cf7f750-117f-4c36-b4ef-14c420d118ce", + "status": "NOT_STARTED", + "inputAmount": { + "amount": "1.761824", + "assetId": "XLM_USDC_5F3T" + }, + "isSignRequired": true + } + } + } + } + } + }, + "400": { + "description": "Error while trying to execute the cross-border flow", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized. Missing / invalid JWT token in Authorization header.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Invalid flowId.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "5XX": { + "description": "Internal error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/payments/payout": { + "post": { + "tags": [ + "Payments - Payout" + ], + "description": "**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoints include APIs available only for customers with Payments Engine enabled on their accounts.
\n
These endpoints are currently in beta and might be subject to changes.
\n
If you want to learn more about Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or email CSM@fireblocks.com.
\n
Create a payout instruction set.
\nA payout instruction set is a set of instructions for distributing payments from a single payment account to a list of payee accounts.
\nThe instruction set defines:
\n
    \n
  • the payment account and its account type (vault, exchange, or fiat).
  • \n
  • the account type (vault account, exchange account, whitelisted address, network connection, fiat account, or merchant account), the amount, and the asset of payment for each payee account.
  • \n
\n", + "security": [ + { + "bearerAuth": [] + } + ], + "summary": "Create a payout instruction set", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePayoutRequest" + }, + "example": { + "paymentAccount": { + "id": "EX_SUB3", + "type": "EXCHANGE_ACCOUNT" + }, + "instructionSet": [ + { + "payeeAccount": { + "id": "bef85a1c-b605-4b2e-bdb5-2d400f4d0bf3", + "type": "EXTERNAL_WALLET" + }, + "amount": { + "amount": "43", + "assetId": "USDC" + } + }, + { + "payeeAccount": { + "id": "3adc1f92-e791-44a8-9aee-7f31c2108b78", + "type": "NETWORK_CONNECTION" + }, + "amount": { + "amount": "4423", + "assetId": "USDC" + } + } + ] + } + } + } + }, + "responses": { + "200": { + "description": "The payout instruction set creation succeeded and returns the generated instruction set with a unique payout IDThe payout ID will be used for executing the payout and checking the payout status.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayoutResponse" + }, + "example": { + "payoutId": "1fe3b61f-7e1f-4a19-aff0-4f0a524d44d7", + "paymentAccount": { + "id": "EX_SUB3", + "type": "EXCHANGE_ACCOUNT" + }, + "createdAt": 1645365800, + "state": "REQUESTED", + "status": "REGISTERED", + "initMethod": "API", + "instructionSet": [ + { + "id": "6ea4a016-536b-49af-b1a0-40b343ccf879", + "name": "payee-wallet-name", + "payeeAccount": { + "id": "bef85a1c-b605-4b2e-bdb5-2d400f4d0bf3", + "type": "EXTERNAL_WALLET" + }, + "amount": { + "amount": "43", + "assetId": "USDC" + }, + "state": "NOT_STARTED", + "transactions": [] + }, + { + "id": "e783a79b-6acc-4d18-885d-ed533cad8eeb", + "name": "payee-by-network", + "payeeAccount": { + "id": "3adc1f92-e791-44a8-9aee-7f31c2108b78", + "type": "NETWORK_CONNECTION" + }, + "amount": { + "amount": "4423.23", + "assetId": "USDC" + }, + "state": "NOT_STARTED", + "transactions": [] + } + ] + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized. Missing / invalid JWT token in Authorization header.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "5XX": { + "description": "Internal error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/payments/payout/{payoutId}/actions/execute": { + "post": { + "tags": [ + "Payments - Payout" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "summary": "Execute a payout instruction set", + "description": "**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoints include APIs available only for customers with Payments Engine enabled on their accounts.
\n
These endpoints are currently in beta and might be subject to changes.
\n
If you want to learn more about Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or email CSM@fireblocks.com.
\n
Execute a payout instruction set.
\n
The instruction set will be verified and executed.
\nSource locking
\nIf you are executing a payout instruction set from a payment account with an already active payout the active payout will complete before the new payout instruction set can be executed.
\nYou cannot execute the same payout instruction set more than once.\n", + "parameters": [ + { + "name": "payoutId", + "description": "the payout id received from the creation of the payout instruction set", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "example": "1fe3b61f-7e1f-4a19-aff0-4f0a524d44d7" + } + ], + "responses": { + "200": { + "description": "Executed the payout instruction set", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DispatchPayoutResponse" + }, + "example": { + "payoutId": "1fe3b61f-7e1f-4a19-aff0-4f0a524d44d7" + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized. Missing / invalid JWT token in Authorization header.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "5XX": { + "description": "Internal error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/payments/payout/{payoutId}": { + "get": { + "tags": [ + "Payments - Payout" + ], + "summary": "Get the status of a payout instruction set", + "description": "**Note:** The reference content in this section documents the Payments Engine endpoint. The Payments Engine endpoints include APIs available only for customers with Payments Engine enabled on their accounts.
\n
These endpoints are currently in beta and might be subject to changes.
\n
If you want to learn more about Fireblocks Payments Engine, please contact your Fireblocks Customer Success Manager or email CSM@fireblocks.com.
\n", + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "payoutId", + "description": "the payout id received from the creation of the payout instruction set", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "example": "1fe3b61f-7e1f-4a19-aff0-4f0a524d44d7" + } + ], + "responses": { + "200": { + "description": "Returns the current status of the payout instruction set, including the status of each payout instruction and the transactions created in the process.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PayoutResponse" + }, + "example": { + "payoutId": "1fe3b61f-7e1f-4a19-aff0-4f0a524d44d7", + "paymentAccount": { + "id": "EX_SUB3", + "type": "EXCHANGE_ACCOUNT" + }, + "createdAt": 1645365800, + "state": "FINALIZED", + "status": "DONE", + "initMethod": "API", + "instructionSet": [ + { + "id": "6ea4a016-536b-49af-b1a0-40b343ccf879", + "name": "payee-wallet-name", + "payeeAccount": { + "id": "bef85a1c-b605-4b2e-bdb5-2d400f4d0bf3", + "type": "EXTERNAL_WALLET" + }, + "amount": { + "amount": "4312", + "assetId": "USDC" + }, + "state": "COMPLETED", + "transactions": [ + { + "id": "35a4b10c-1f83-4f0b-ba2a-da0e73be2d6e", + "state": "COMPLETED", + "timestamp": 1645367429 + } + ] + }, + { + "id": "e783a79b-6acc-4d18-885d-ed533cad8eeb", + "name": "payee-by-network", + "payeeAccount": { + "id": "3adc1f92-e791-44a8-9aee-7f31c2108b78", + "type": "NETWORK_CONNECTION" + }, + "amount": { + "amount": "4423.23", + "assetId": "USDC" + }, + "state": "COMPLETED", + "transactions": [ + { + "id": "4505e7d9-bfc7-41bc-9750-54311fcbbf26", + "state": "COMPLETED", + "timestamp": 1645367449 + } + ] + } + ], + "reportUrl": "https://some-url.com/reports/cc5777c1-75a9-4337-aebd-f1f5a40a9391" + } + } + } + }, + "401": { + "description": "Unauthorized. Missing / invalid JWT token in Authorization header.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No payout with the given payout ID exists.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "5XX": { + "description": "Internal error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/gas_station": { + "get": { + "summary": "Get gas station settings", + "description": "Returns gas station settings and ETH balance.", + "tags": [ + "Gas stations" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "gas_station_info = fireblocks.get_gas_station_info()", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const gasStationInfo = await fireblocks.gasStationInfo();", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "responses": { + "200": { + "description": "Gas Station properties", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/GasStationPropertiesResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/gas_station/{assetId}": { + "get": { + "summary": "Get gas station settings by asset", + "description": "Returns gas station settings and balances for a requested asset.", + "tags": [ + "Gas stations" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "gas_station_info = fireblocks.get_gas_station_info(asset_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const gasStationInfo = await fireblocks.gasStationInfo(assetId);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "required": true, + "name": "assetId", + "description": "The ID of the asset", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + } + ], + "responses": { + "200": { + "description": "Gas Station properties", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/GasStationPropertiesResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/gas_station/configuration": { + "put": { + "summary": "Edit gas station settings", + "description": "Configures gas station settings for ETH.", + "tags": [ + "Gas stations" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "gas_station = fireblocks.set_gas_station_configuration(gas_threshold, gas_cap, max_gas_price, asset_id)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const gasStation = await fireblocks.setGasStationConfiguration(gasThreshold, gasCap, maxGasPrice)", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GasStationConfiguration" + } + } + } + }, + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/gas_station/configuration/{assetId}": { + "put": { + "summary": "Edit gas station settings for an asset", + "description": "Configures gas station settings for a requested asset.", + "tags": [ + "Gas stations" + ], + "parameters": [ + { + "in": "path", + "required": true, + "name": "assetId", + "description": "The ID of the asset", + "schema": { + "type": "string", + "x-fb-entity": "asset" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GasStationConfiguration" + } + } + } + }, + "responses": { + "201": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/users": { + "get": { + "summary": "List users", + "description": "List all users for the workspace.\n\nPlease note that this endpoint is available only for API keys with Admin permissions.\n", + "tags": [ + "Users" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "users = fireblocks.get_users()", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const users = await fireblocks.getUsers();", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "responses": { + "200": { + "description": "List of users", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/GetUsersResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/audits": { + "get": { + "summary": "Get audit logs", + "tags": [ + "Audit Logs" + ], + "parameters": [ + { + "in": "query", + "name": "timePeriod", + "required": true, + "description": "The last time period to fetch audit logs", + "schema": { + "type": "string", + "enum": [ + "DAY", + "WEEK" + ] + } + } + ], + "responses": { + "200": { + "description": "Audit logs from requested time period", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/off_exchange/add": { + "post": { + "summary": "add collateral", + "description": "add collateral, create deposit request", + "tags": [ + "Off exchanges" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddCollateralRequestBody" + } + } + } + }, + "responses": { + "200": { + "description": "A transaction object", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/CreateTransactionResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/off_exchange/remove": { + "post": { + "summary": "remove collateral", + "description": "remove collateral, create withdraw request", + "tags": [ + "Off exchanges" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RemoveCollateralRequestBody" + } + } + } + }, + "responses": { + "200": { + "description": "A transaction object", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/CreateTransactionResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/off_exchange/settlements/trader": { + "post": { + "summary": "create settlement for a trader", + "description": "create settlement for a trader", + "tags": [ + "Off exchanges" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SettlementRequestBody" + } + } + } + }, + "responses": { + "201": { + "description": "A settlement object", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/SettlementResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/off_exchange/settlements/transactions": { + "get": { + "summary": "get settlements transactions from exchange", + "description": "get settlements transactions from exchange", + "tags": [ + "Off exchanges" + ], + "parameters": [ + { + "in": "query", + "name": "mainExchangeAccountId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "A settlement transactions", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/GetSettlementResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/off_exchange/collateral_accounts/{mainExchangeAccountId}": { + "get": { + "summary": "Find a specific collateral exchange account", + "description": "Returns a collateral account by mainExchangeAccountId.", + "tags": [ + "Off exchanges" + ], + "parameters": [ + { + "in": "path", + "name": "mainExchangeAccountId", + "required": true, + "description": "The id of the main exchange account for which the requested collateral account is associated with", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "responses": { + "200": { + "description": "An ExchangeAccount object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ExchangeAccount" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/webhooks/resend": { + "post": { + "summary": "Resend failed webhooks", + "description": "Resends all failed webhook notifications.", + "tags": [ + "Webhooks" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "result = fireblocks.resend_webhooks()", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const result = await fireblocks.resendWebhooks();", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "responses": { + "200": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ResendWebhooksResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/webhooks/resend/{txId}": { + "post": { + "summary": "Resend failed webhooks for a transaction by ID", + "description": "Resends failed webhook notifications for a transaction by ID.", + "tags": [ + "Webhooks" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "result = fireblocks.resend_transaction_webhooks_by_id(txId, resend_created, resend_status_updated)", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const result = await fireblocks.resendTransactionWebhooksById(txId, resendCreated, resendStatusUpdated);", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "parameters": [ + { + "in": "path", + "name": "txId", + "required": true, + "description": "The ID of the transaction for webhooks", + "schema": { + "type": "string", + "minimum": 1 + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "resendCreated": { + "type": "boolean" + }, + "resendStatusUpdated": { + "type": "boolean" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/nfts/ownership/tokens": { + "put": { + "operationId": "refreshNFTOwnershipByVault", + "summary": "Refresh vault account tokens", + "description": "Updates all tokens and balances per blockchain and vault account.\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n", + "parameters": [ + { + "name": "blockchainDescriptor", + "required": true, + "in": "query", + "description": "Blockchain descriptor filter", + "schema": { + "enum": [ + "ETH", + "ETH_TEST3", + "POLYGON", + "POLYGON_TEST_MUMBAI" + ], + "type": "string" + } + }, + { + "name": "vaultAccountId", + "required": true, + "in": "query", + "description": "Vault account filter", + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + } + }, + "tags": [ + "NFTs (Beta)" + ] + }, + "get": { + "operationId": "getOwnedNFTs", + "summary": "List all owned tokens (paginated)", + "description": "Returns all tokens and their data in your workspace.\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n", + "parameters": [ + { + "name": "blockchainDescriptor", + "required": false, + "in": "query", + "description": "Blockchain descriptor filter", + "schema": { + "enum": [ + "ETH", + "ETH_TEST3", + "POLYGON", + "POLYGON_TEST_MUMBAI" + ], + "type": "string" + } + }, + { + "name": "vaultAccountIds", + "required": false, + "in": "query", + "description": "A comma separated list of Vault Account IDs. Up to 100 are allowed in a single request", + "schema": { + "type": "string" + } + }, + { + "name": "ids", + "required": false, + "in": "query", + "description": "A comma separated list of NFT IDs. Up to 100 are allowed in a single request.", + "schema": { + "type": "string" + } + }, + { + "name": "collectionIds", + "required": false, + "in": "query", + "description": "A comma separated list of collection IDs. Up to 100 are allowed in a single request.", + "schema": { + "type": "string" + } + }, + { + "name": "pageCursor", + "required": false, + "in": "query", + "description": "Page cursor to fetch", + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "required": false, + "in": "query", + "description": "Items per page (max 100)", + "schema": { + "minimum": 1, + "maximum": 100, + "type": "number" + } + }, + { + "name": "sort", + "required": false, + "in": "query", + "description": "Sort by param, it can be one param or a list of params separated by comma", + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "ownershipLastUpdateTime", + "name", + "collection.name", + "blockchainDescriptor" + ] + } + } + }, + { + "name": "order", + "required": false, + "in": "query", + "description": "Order direction, it can be `ASC` for ascending or `DESC` for descending", + "schema": { + "default": "ASC", + "enum": [ + "DESC", + "ASC" + ], + "type": "string" + } + }, + { + "name": "status", + "required": false, + "in": "query", + "description": "Token ownership status", + "schema": { + "default": "LISTED", + "enum": [ + "LISTED", + "ARCHIVED" + ], + "type": "string" + } + }, + { + "name": "search", + "required": false, + "in": "query", + "description": "Search owned tokens and their collections. Possible criteria for search: token name and id within the contract/collection, collection name, blockchain descriptor and name.", + "schema": { + "maximum": 100, + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "application/json": { + "schema": { + "properties": { + "paging": { + "$ref": "#/components/schemas/Paging" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TokenOwnershipResponse" + } + } + } + } + } + } + } + }, + "tags": [ + "NFTs (Beta)" + ] + } + }, + "/nfts/ownership/collections": { + "get": { + "operationId": "listOwnedCollections", + "summary": "List owned collections (paginated)", + "description": "Returns all collections in your workspace\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n", + "parameters": [ + { + "name": "search", + "required": false, + "in": "query", + "description": "Search owned collections. Possible criteria for search: collection name, collection contract address.", + "schema": { + "maximum": 100, + "type": "string" + } + }, + { + "name": "pageCursor", + "required": false, + "in": "query", + "description": "Page cursor to fetch", + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "required": false, + "in": "query", + "description": "Items per page (max 100)", + "schema": { + "minimum": 1, + "maximum": 100, + "type": "number" + } + }, + { + "name": "sort", + "required": false, + "in": "query", + "description": "Sort by param, it can be one param or a list of params separated by comma", + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "name" + ] + } + } + }, + { + "name": "order", + "required": false, + "in": "query", + "description": "Order direction, it can be `ASC` for ascending or `DESC` for descending", + "schema": { + "default": "ASC", + "enum": [ + "DESC", + "ASC" + ], + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "application/json": { + "schema": { + "properties": { + "paging": { + "$ref": "#/components/schemas/Paging" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CollectionOwnershipResponse" + } + } + } + } + } + } + } + }, + "tags": [ + "NFTs (Beta)" + ] + } + }, + "/nfts/tokens/{id}": { + "put": { + "operationId": "refreshNFTMetadata", + "summary": "Refresh token metadata", + "description": "Updates the latest token metadata.\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "NFT ID", + "example": "NFT-abcdefabcdefabcdefabcdefabcdefabcdefabcd", + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { + "description": "", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + } + }, + "tags": [ + "NFTs (Beta)" + ] + }, + "get": { + "operationId": "getNFT", + "summary": "List token data by ID", + "description": "Returns the requested token data.\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "NFT ID", + "example": "NFT-abcdefabcdefabcdefabcdefabcdefabcdefabcd", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TokenResponse" + } + } + } + } + }, + "tags": [ + "NFTs (Beta)" + ] + } + }, + "/nfts/tokens": { + "get": { + "operationId": "getNFTs", + "summary": "List tokens by IDs", + "description": "Returns the requested tokens data\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n", + "parameters": [ + { + "name": "ids", + "required": true, + "in": "query", + "description": "A comma separated list of NFT IDs. Up to 100 are allowed in a single request.", + "schema": { + "type": "string" + } + }, + { + "name": "pageCursor", + "required": false, + "in": "query", + "description": "Page cursor to fetch", + "schema": { + "type": "string" + } + }, + { + "name": "pageSize", + "required": false, + "in": "query", + "description": "Items per page (max 100)", + "schema": { + "minimum": 1, + "maximum": 100, + "type": "number" + } + }, + { + "name": "sort", + "required": false, + "in": "query", + "description": "Sort by param, it can be one param or a list of params separated by comma", + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "collection.name", + "name", + "blockchainDescriptor" + ] + } + } + }, + { + "name": "order", + "required": false, + "in": "query", + "description": "Order direction, it can be `ASC` for ascending or `DESC` for descending", + "schema": { + "default": "ASC", + "enum": [ + "DESC", + "ASC" + ], + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "application/json": { + "schema": { + "properties": { + "paging": { + "$ref": "#/components/schemas/Paging" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TokenResponse" + } + } + } + } + } + } + } + }, + "tags": [ + "NFTs (Beta)" + ] + } + }, + "/nfts/ownership/tokens/{id}/status": { + "put": { + "operationId": "updateTokenOwnershipStatus", + "summary": "Update token ownership status", + "description": "Updates token ownership status for a tenant, in all tenant vaults.\n\n**Note**: This endpoint is now in Beta, disabled for general availability at this time.\n\nTo enroll in beta & enable this endpoint, contact your Fireblocks Customer Success Manager or reach out to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).\n", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "description": "NFT ID", + "example": "NFT-abcdefabcdefabcdefabcdefabcdefabcdefabcd", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateTokenOwnershipStatusDto" + } + } + } + }, + "responses": { + "200": { + "description": "", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + } + }, + "tags": [ + "NFTs (Beta)" + ] + } + }, + "/connections": { + "get": { + "operationId": "get", + "summary": "List all open Web3 connections.", + "description": "Get open Web3 connections.", + "parameters": [ + { + "name": "order", + "required": false, + "in": "query", + "description": "List order; ascending or descending.", + "schema": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "default": "ASC" + } + }, + { + "name": "filter", + "required": false, + "in": "query", + "description": "Parsed filter object", + "examples": { + "object": { + "summary": "The filter object", + "description": "", + "value": { + "id": "string", + "userId": "string", + "vaultAccountId": "number", + "connectionMethod": "string", + "feeLevel": "string", + "appUrl": "string", + "appName": "string" + } + }, + "stringified": { + "summary": "The stringified parsed object", + "description": "About stringified parsed objects:\n\n* Each key-value pair is separated by '=', and each pair is separated by ',' (you can use [`qs`](https://www.npmjs.com/package/qs) package for this)", + "value": "id=string,userId=string,vaultAccountId=number,connectionMethod=string,feeLevel=string,appUrl=string,appName=string" + } + }, + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "userId": { + "type": "string" + }, + "vaultAccountId": { + "type": "number" + }, + "connectionMethod": { + "type": "string" + }, + "feeLevel": { + "type": "string" + }, + "appUrl": { + "type": "string" + }, + "appName": { + "type": "string" + } + } + } + }, + { + "name": "sort", + "required": false, + "in": "query", + "description": "Property to sort Web3 connections by.", + "schema": { + "type": "string", + "enum": [ + "id", + "userId", + "vaultAccountId", + "createdAt", + "feeLevel", + "appUrl", + "appName" + ], + "default": "createdAt" + } + }, + { + "name": "pageSize", + "required": false, + "in": "query", + "description": "Amount of results to return in the next page.", + "schema": { + "type": "number", + "default": 10, + "maximum": 50 + } + }, + { + "name": "next", + "required": false, + "in": "query", + "description": "Cursor to the next page", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetConnectionsResponse" + } + } + } + }, + "400": { + "description": "Query parameters were invalid", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "500": { + "description": "Something went wrong", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + } + }, + "tags": [ + "Web3 connections" + ] + } + }, + "/connections/wc": { + "post": { + "operationId": "create", + "summary": "Create a new Web3 connection.", + "description": "Initiate a new Web3 connection.\n\n* Note: After this succeeds, make a request to `PUT /v1/connections/wc/{id}` (below) to approve or reject the new Web3 connection.", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateConnectionRequest" + } + } + } + }, + "responses": { + "201": { + "description": "Web3 connection initiated successfully", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateConnectionResponse" + } + } + } + }, + "400": { + "description": "Invalid data sent", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "500": { + "description": "Something went wrong", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + } + }, + "tags": [ + "Web3 connections" + ] + } + }, + "/connections/wc/{id}": { + "put": { + "operationId": "submit", + "summary": "Respond to a pending Web3 connection request.", + "description": "Submit a response to *approve* or *reject* an initiated Web3 connection.\n* Note: This call is used to complete your `POST /v1/connections/wc/` request.\n\nAfter this succeeds, your new Web3 connection is created and functioning.", + "parameters": [ + { + "name": "id", + "description": "The ID of the initiated Web3 connection to approve.", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RespondToConnectionRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Connection submitted successfully", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "400": { + "description": "Invalid data sent", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "404": { + "description": "Connection not found", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "500": { + "description": "Something went wrong", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + } + }, + "tags": [ + "Web3 connections" + ] + }, + "delete": { + "operationId": "remove", + "summary": "Remove an existing Web3 connection.", + "description": "Remove a Web3 connection", + "parameters": [ + { + "name": "id", + "description": "The ID of the existing Web3 connection to remove.", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Connection removed successfully", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "404": { + "description": "Connection not found", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + }, + "500": { + "description": "Something went wrong", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + } + } + }, + "tags": [ + "Web3 connections" + ] + } + }, + "/screening/travel_rule/transaction/validate": { + "post": { + "operationId": "TravelRuleApiController_validate", + "summary": "Validate Travel Rule Transaction", + "description": "Validate Travel Rule transactions.\n\nChecks what beneficiary VASP details are required by your jurisdiction and the beneficiary's jurisdiction.\n\n**Note:** The reference content in this section documents the Travel Rule beta endpoint. The beta endpoint includes APIs that are currently in preview and aren't yet generally available.\n\nTo enroll in the beta and enable this endpoint, contact your Fireblocks Customer Success Manager or send an email to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TravelRuleValidateTransactionRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Transaction validated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TravelRuleValidateTransactionResponse" + } + } + } + }, + "400": { + "description": "Invalid request body" + }, + "500": { + "description": "Internal server error" + } + }, + "tags": [ + "Travel Rule (Beta)" + ] + } + }, + "/screening/travel_rule/transaction/validate/full": { + "post": { + "operationId": "TravelRuleApiController_validateFull", + "summary": "Validate Full Travel Rule Transaction", + "description": "Validate Full Travel Rule transactions.\n\nChecks for all required information on the originator and beneficiary VASPs.\n\n**Note:** The reference content in this section documents the Travel Rule beta endpoint. The beta endpoint includes APIs that are currently in preview and aren't yet generally available.\n\nTo enroll in the beta and enable this endpoint, contact your Fireblocks Customer Success Manager or send an email to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TravelRuleValidateFullTransactionRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Transaction validated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TravelRuleValidateTransactionResponse" + } + } + } + }, + "400": { + "description": "Invalid request body" + }, + "500": { + "description": "Internal server error" + } + }, + "tags": [ + "Travel Rule (Beta)" + ] + } + }, + "/screening/travel_rule/vasp/{did}": { + "get": { + "operationId": "TravelRuleApiController_findVasp", + "summary": "Get VASP details", + "description": "Get VASP Details.\n\nReturns information about a VASP that has the specified DID.\n\n**Note:** The reference content in this section documents the Travel Rule beta endpoint. The beta endpoint includes APIs that are currently in preview and aren't yet generally available.\n\nTo enroll in the beta and enable this endpoint, contact your Fireblocks Customer Success Manager or send an email to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).", + "parameters": [ + { + "name": "did", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + }, + { + "name": "fields", + "required": false, + "in": "query", + "description": "CSV of fields to return (all, \"blank\" or see list of all field names below)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Transaction validated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TravelRuleVASP" + } + } + } + }, + "400": { + "description": "Invalid request body" + }, + "500": { + "description": "Internal server error" + } + }, + "tags": [ + "Travel Rule (Beta)" + ] + } + }, + "/screening/travel_rule/vasp": { + "get": { + "operationId": "TravelRuleApiController_findAllVasp", + "summary": "Get All VASPs", + "description": "Get All VASPs.\n\nReturns a list of VASPs. VASPs can be searched and sorted and results are paginated.\n\n**Note:** The reference content in this section documents the Travel Rule beta endpoint. The beta endpoint includes APIs that are currently in preview and aren't yet generally available.\n\nTo enroll in the beta and enable this endpoint, contact your Fireblocks Customer Success Manager or send an email to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).", + "parameters": [ + { + "name": "order", + "required": false, + "in": "query", + "description": "Field to order by", + "schema": { + "type": "string" + } + }, + { + "name": "per_page", + "required": false, + "in": "query", + "description": "Records per page", + "schema": { + "type": "number" + } + }, + { + "name": "page", + "required": false, + "in": "query", + "description": "Page number", + "schema": { + "type": "number" + } + }, + { + "name": "fields", + "required": false, + "in": "query", + "description": "CSV of fields to return (all, \"blank\" or see list of all field names below)", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Get all VASPs", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TravelRuleGetAllVASPsResponse" + } + } + } + } + }, + "tags": [ + "Travel Rule (Beta)" + ] + } + }, + "/screeening/travel_rule/vasp/update": { + "put": { + "operationId": "TravelRuleApiController_updateVasp", + "summary": "Add jsonDidKey to VASP details", + "description": "Update VASP Details.\n\nUpdates a VASP with the provided parameters. Use this endpoint to add your public jsonDIDkey generated by Notabene.\n\n**Note:** The reference content in this section documents the Travel Rule beta endpoint. The beta endpoint includes APIs that are currently in preview and aren't yet generally available.\n\nTo enroll in the beta and enable this endpoint, contact your Fireblocks Customer Success Manager or send an email to [CSM@fireblocks.com](mailto:CSM@fireblocks.com).", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TravelRuleUpdateVASPDetails" + } + } + } + }, + "responses": { + "200": { + "description": "VASP updated successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TravelRuleUpdateVASPDetails" + } + } + } + }, + "400": { + "description": "Invalid request body" + }, + "500": { + "description": "Internal server error" + } + }, + "tags": [ + "Travel Rule (Beta)" + ] + } + }, + "/tap/active_policy": { + "get": { + "summary": "Get the active policy and its validation", + "description": "Returns the active policy and its validation.
\n**Note:** These endpoints are currently in beta and might be subject to changes.\nIf you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n", + "tags": [ + "Policy Editor (Beta)" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "policy = fireblocks.get_active_policy()", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const policy = await fireblocks.getActivePolicy();", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "responses": { + "200": { + "description": "A policy object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PolicyAndValidationResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/tap/draft": { + "get": { + "summary": "Get the active draft", + "description": "Returns the active draft and its validation.
\n**Note:** These endpoints are currently in beta and might be subject to changes.\nIf you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n", + "tags": [ + "Policy Editor (Beta)" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "policy = fireblocks.get_draft()", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const policy = await fireblocks.getDraft();", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "responses": { + "200": { + "description": "A draft validation response object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/DraftReviewAndValidationResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "put": { + "summary": "Update the draft with a new set of rules", + "description": "Update the draft and return its validation.
\n**Note:** These endpoints are currently in beta and might be subject to changes.\nIf you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n", + "tags": [ + "Policy Editor (Beta)" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "policy = fireblocks.update_draft()", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const policy = await fireblocks.updateDraft();", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "rules": { + "description": "rules to update the draft with", + "type": "array", + "items": { + "$ref": "#/components/schemas/PolicyRule" + } + } + } + } + } + } + }, + "responses": { + "200": { + "description": "A draft validation response object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/DraftReviewAndValidationResponse" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + }, + "post": { + "summary": "Send publish request for a certain draft id", + "description": "Send publish request of certain draft id and returns the response.
\n**Note:** These endpoints are currently in beta and might be subject to changes.\nIf you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n", + "tags": [ + "Policy Editor (Beta)" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "policy = fireblocks.publish_draft()", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const policy = await fireblocks.publishDraft();", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "draftId": { + "description": "draft unique identifier", + "type": "string" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "A policy publish result object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PublishResult" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + }, + "/tap/publish": { + "post": { + "summary": "Send publish request for a set of policy rules", + "description": "Send publish request of set of policy rules and returns the response.
\n**Note:** These endpoints are currently in beta and might be subject to changes.\nIf you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.\n", + "tags": [ + "Policy Editor (Beta)" + ], + "x-readme": { + "code-samples": [ + { + "language": "python", + "code": "policy = fireblocks.publish_rules()", + "name": "Fireblocks SDK Python example" + }, + { + "language": "javascript", + "code": "const policy = await fireblocks.publishRules();", + "name": "Fireblocks SDK Javascript example" + } + ] + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "properties": { + "rules": { + "description": "Policy rules to publish", + "type": "array", + "items": { + "$ref": "#/components/schemas/PolicyRule" + } + } + } + } + } + } + }, + "responses": { + "201": { + "description": "A policy publish result object", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/PublishResult" + } + } + } + }, + "default": { + "$ref": "#/components/responses/Error" + } + } + } + } + }, + "components": { + "responses": { + "Error": { + "description": "Error Response", + "headers": { + "X-Request-ID": { + "$ref": "#/components/headers/X-Request-ID" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "headers": { + "X-Request-ID": { + "schema": { + "type": "string" + }, + "description": "Unique ID correlated to the API request. Please provide it in any support ticket you create or on Github issues related to Fireblocks SDKs" + }, + "next-page": { + "schema": { + "type": "string" + }, + "description": "URL representing a new request to this API endpoint to receive the next page of results." + }, + "prev-page": { + "schema": { + "type": "string" + }, + "description": "URL representing a new request to this API endpoint to receive the previous page of results." + }, + "X-End-User-Wallet-Id": { + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Unique ID of the End-User wallet to the API request. Required for end-user wallet operations.", + "required": false + } + }, + "requestBodies": { + "NewWallet": { + "content": { + "application/json": { + "schema": { + "properties": { + "name": { + "type": "string", + "description": "the wallet's display name" + } + } + } + } + } + }, + "WalletAddressProperties": { + "content": { + "application/json": { + "schema": { + "properties": { + "address": { + "type": "string", + "description": "The wallet's address (or xpub) of the wallet" + } + } + } + } + } + } + }, + "securitySchemes": { + "bearerTokenAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + }, + "ApiKeyAuth": { + "type": "apiKey", + "in": "header", + "name": "X-API-Key" + } + }, + "schemas": { + "MediaEntityResponse": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "Cached accessible URL" + }, + "contentType": { + "type": "string", + "enum": [ + "IMAGE", + "VIDEO", + "ANIMATION", + "THREE_D", + "TEXT", + "GIF", + "UNKNOWN_TYPE", + "SVG", + "AUDIO" + ], + "description": "Media type" + } + }, + "required": [ + "url", + "contentType" + ] + }, + "TokenCollectionResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "symbol": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "symbol" + ] + }, + "TokenResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The Fireblocks NFT asset id" + }, + "tokenId": { + "type": "string", + "description": "Token id within the contract/collection" + }, + "standard": { + "type": "string", + "description": "ERC721 / ERC1155" + }, + "metadataURI": { + "type": "string", + "description": "URL of the original token JSON metadata" + }, + "cachedMetadataURI": { + "type": "string", + "description": "URL of the cached token JSON metadata" + }, + "media": { + "description": "Media items extracted from metadata JSON", + "type": "array", + "items": { + "$ref": "#/components/schemas/MediaEntityResponse" + } + }, + "collection": { + "description": "Parent collection information", + "allOf": [ + { + "$ref": "#/components/schemas/TokenCollectionResponse" + } + ] + }, + "blockchainDescriptor": { + "type": "string", + "enum": [ + "ETH", + "ETH_TEST3", + "POLYGON", + "POLYGON_TEST_MUMBAI" + ] + }, + "description": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "tokenId", + "standard", + "media", + "blockchainDescriptor", + "description", + "name" + ] + }, + "UpdateTokenOwnershipStatusDto": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "LISTED", + "ARCHIVED" + ] + } + }, + "required": [ + "status" + ] + }, + "Paging": { + "type": "object", + "properties": { + "next": { + "type": "string", + "description": "Cursor to the next page" + } + }, + "required": [ + "next" + ] + }, + "TokenOwnershipResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The Fireblocks NFT asset id" + }, + "tokenId": { + "type": "string", + "description": "Token id within the contract/collection" + }, + "standard": { + "type": "string", + "description": "ERC721 / ERC1155" + }, + "metadataURI": { + "type": "string", + "description": "URL of the original token JSON metadata" + }, + "cachedMetadataURI": { + "type": "string", + "description": "URL of the cached token JSON metadata" + }, + "media": { + "description": "Media items extracted from metadata JSON", + "type": "array", + "items": { + "$ref": "#/components/schemas/MediaEntityResponse" + } + }, + "collection": { + "description": "Parent collection information", + "allOf": [ + { + "$ref": "#/components/schemas/TokenCollectionResponse" + } + ] + }, + "balance": { + "type": "string" + }, + "vaultAccountId": { + "type": "string" + }, + "ownershipStartTime": { + "type": "number" + }, + "ownershipLastUpdateTime": { + "type": "number" + }, + "blockchainDescriptor": { + "enum": [ + "ETH", + "ETH_TEST3", + "POLYGON", + "POLYGON_TEST_MUMBAI" + ], + "type": "string" + }, + "description": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "tokenId", + "standard", + "media", + "balance", + "vaultAccountId", + "ownershipStartTime", + "ownershipLastUpdateTime", + "blockchainDescriptor", + "description", + "name" + ] + }, + "CollectionOwnershipResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Fireblocks collection id" + }, + "name": { + "type": "string", + "description": "Collection name" + }, + "symbol": { + "type": "string", + "description": "Collection symbol" + }, + "standard": { + "type": "string", + "description": "Collection contract standard" + }, + "blockchainDescriptor": { + "enum": [ + "ETH", + "ETH_TEST3", + "POLYGON", + "POLYGON_TEST_MUMBAI" + ], + "type": "string", + "description": "Collection's blockchain" + }, + "contractAddress": { + "type": "string", + "description": "Collection contract standard" + } + }, + "required": [ + "id", + "name", + "symbol", + "blockchainDescriptor" + ] + }, + "WalletAsset": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/ConfigChangeRequestStatus" + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + } + } + }, + "ExternalWalletAsset": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/ConfigChangeRequestStatus" + }, + "address": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "activationTime": { + "type": "string" + }, + "additionalInfo": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WalletAssetAdditionalInfo" + } + } + } + }, + "WalletAssetAdditionalInfo": { + "type": "object", + "properties": { + "accountHolderGivenName": { + "type": "string" + }, + "accountHolderSurname": { + "type": "string" + }, + "accountHolderCity": { + "type": "string" + }, + "accountHolderCountry": { + "type": "string" + }, + "accountHolderAddress1": { + "type": "string" + }, + "accountHolderAddress2": { + "type": "string" + }, + "accountHolderDistrict": { + "type": "string" + }, + "accountHolderPostalCode": { + "type": "string" + }, + "abaRoutingNumber": { + "type": "string" + }, + "abaAccountNumber": { + "type": "string" + }, + "abaCountry": { + "type": "string" + }, + "iban": { + "type": "string" + }, + "ibanCity": { + "type": "string" + }, + "ibanCountry": { + "type": "string" + }, + "speiClabe": { + "type": "string" + }, + "speiName": { + "type": "string" + } + } + }, + "ExchangeAsset": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + }, + "lockedAmount": { + "type": "string" + }, + "total": { + "type": "string" + }, + "available": { + "type": "string" + } + } + }, + "ExchangeTradingAccount": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExchangeAsset" + } + } + } + }, + "FiatAsset": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "balance": { + "type": "string" + } + } + }, + "CreateVaultAssetResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "address": { + "type": "string" + }, + "legacyAddress": { + "type": "string" + }, + "enterpriseAddress": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "eosAccountName": { + "type": "string" + }, + "status": { + "type": "string" + }, + "activationTxId": { + "type": "string" + } + } + }, + "RewardsInfo": { + "type": "object", + "properties": { + "pendingRewards": { + "description": "Amount that is pending for rewards", + "type": "string" + } + } + }, + "VaultAsset": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "total": { + "description": "The total wallet balance. In EOS this value includes the network balance, self staking and pending refund. For all other coins it is the balance as it appears on the blockchain.", + "type": "string" + }, + "balance": { + "deprecated": true, + "description": "Deprecated - replaced by \"total\"", + "type": "string" + }, + "available": { + "description": "Funds available for transfer. Equals the blockchain balance minus any locked amounts", + "type": "string" + }, + "pending": { + "description": "The cumulative balance of all transactions pending to be cleared", + "type": "string" + }, + "frozen": { + "description": "The cumulative frozen balance", + "type": "string" + }, + "lockedAmount": { + "description": "Funds in outgoing transactions that are not yet published to the network", + "type": "string" + }, + "staked": { + "description": "Staked balance", + "type": "string" + }, + "totalStakedCPU": { + "type": "number", + "description": "Deprecated" + }, + "totalStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedCPU": { + "type": "string", + "description": "Deprecated" + }, + "selfStakedNetwork": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundCPU": { + "type": "string", + "description": "Deprecated" + }, + "pendingRefundNetwork": { + "type": "string", + "description": "Deprecated" + }, + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + }, + "rewardsInfo": { + "$ref": "#/components/schemas/RewardsInfo" + } + } + }, + "VaultWalletAddress": { + "type": "object", + "properties": { + "assetId": { + "type": "string", + "x-fb-entity": "asset" + }, + "address": { + "type": "string" + }, + "description": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "addressFormat": { + "type": "string", + "enum": [ + "SEGWIT", + "LEGACY" + ] + }, + "legacyAddress": { + "type": "string" + }, + "enterpriseAddress": { + "type": "string" + }, + "bip44AddressIndex": { + "type": "integer" + }, + "userDefined": { + "type": "boolean" + } + } + }, + "CreateAddressResponse": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "legacyAddress": { + "type": "string" + }, + "enterpriseAddress": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "bip44AddressIndex": { + "type": "integer" + } + } + }, + "VaultAccountsPagedResponse": { + "type": "object", + "properties": { + "accounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VaultAccount" + } + }, + "paging": { + "type": "object", + "properties": { + "before": { + "type": "string" + }, + "after": { + "type": "string" + } + } + }, + "previousUrl": { + "type": "string" + }, + "nextUrl": { + "type": "string" + } + } + }, + "PaginatedAssetWalletResponse": { + "type": "object", + "properties": { + "assetWallets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AssetWallet" + } + }, + "paging": { + "type": "object", + "properties": { + "before": { + "description": "A string representing a cursor. Users can use this with a new request to this API endpoint as the “before” request parameter to fetch the previous page of results.", + "type": "string" + }, + "after": { + "description": "A string representing a cursor. Users can use this with a new request to this API endpoint as the “before” request parameter to fetch the next page of results.", + "type": "string" + } + } + } + } + }, + "AssetWallet": { + "type": "object", + "properties": { + "vaultId": { + "description": "ID of the vault account. You can [get the vault account by this ID](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid) to retrieve vault properties such as its name, auto fueling, hidden on UI or customer reference ID.", + "type": "string" + }, + "assetId": { + "description": "ID of the asset. You can get more information about this asset by using the [supported assets API](https://developers.fireblocks.com/reference/get_supported-assets)", + "type": "string" + }, + "available": { + "description": "Available balance, available to use in a transaction.", + "type": "string" + }, + "total": { + "description": "Total balance at the asset wallet, as seen at the blockchain explorers. This includes balance available, and any kind of unavailable balance such as locked, frozen, or others.", + "type": "string" + }, + "pending": { + "description": "Pending balance.", + "type": "string" + }, + "staked": { + "description": "Staked balance.", + "type": "string" + }, + "frozen": { + "description": "Funds frozen due to the anti-money laundering policy at this workspace.", + "type": "string" + }, + "lockedAmount": { + "description": "Locked balance.", + "type": "string" + }, + "blockHeight": { + "description": "The height (number) of the block of the balance. Can by empty.", + "type": "string" + }, + "blockHash": { + "description": "The hash of the block of the balance. Can by empty.", + "type": "string" + }, + "creationTimestamp": { + "description": "Unix timestamp of the time the asset wallet was created.", + "type": "string" + } + } + }, + "VaultAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VaultAsset" + } + }, + "hiddenOnUI": { + "type": "boolean" + }, + "customerRefId": { + "type": "string" + }, + "autoFuel": { + "type": "boolean" + } + } + }, + "UnmanagedWallet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "customerRefId": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WalletAsset" + } + } + }, + "required": [ + "id", + "name", + "status" + ] + }, + "ExchangeAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/ExchangeType" + }, + "name": { + "type": "string", + "description": "Display name of the exchange account" + }, + "status": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExchangeAsset" + } + }, + "tradingAccounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ExchangeTradingAccount" + } + }, + "isSubaccount": { + "description": "True if the account is a subaccount in an exchange", + "type": "boolean" + }, + "mainAccountId": { + "description": "if the account is a sub-account, the ID of the main account", + "type": "string" + } + } + }, + "FiatAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/FiatAccountType" + }, + "name": { + "type": "string", + "description": "Display name of the fiat account" + }, + "address": { + "type": "string" + }, + "assets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FiatAsset" + } + } + } + }, + "OneTimeAddress": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "tag": { + "type": "string" + } + }, + "required": [ + "address" + ] + }, + "TransferPeerPath": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT", + "COMPOUND", + "GAS_STATION", + "ONE_TIME_ADDRESS", + "UNKNOWN", + "END_USER_WALLET" + ] + }, + "subType": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "BLINC", + "BYBIT", + "CIRCLE", + "COINBASEEXCHANGE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "GEMINI", + "HITBTC", + "HUOBI", + "INDEPENDENTRESERVE", + "KORBIT", + "KRAKEN", + "KRAKENINTL", + "KUCOIN", + "LIQUID", + "OKCOIN", + "OKEX", + "PAXOS", + "POLONIEX", + "External", + "Internal" + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "walletId": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "type" + ] + }, + "DestinationTransferPeerPath": { + "allOf": [ + { + "$ref": "#/components/schemas/TransferPeerPath" + }, + { + "type": "object" + }, + { + "description": "The destination of the transaction.", + "properties": { + "oneTimeAddress": { + "$ref": "#/components/schemas/OneTimeAddress" + } + } + } + ] + }, + "CreateTransactionResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the transaction." + }, + "status": { + "type": "string", + "description": "The primary status of the transaction. For details, see [Primary transaction statuses.] (https://developers.fireblocks.com/reference/primary-transaction-statuses)" + }, + "systemMessages": { + "$ref": "#/components/schemas/SystemMessageInfo" + } + } + }, + "SystemMessageInfo": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "WARN", + "BLOCK" + ] + }, + "message": { + "type": "string", + "description": "A response from Fireblocks that communicates a message about the health of the process being performed. If this object is returned with data, you should expect potential delays or incomplete transaction statuses.", + "example": "Slow transaction processing. Outgoing transactions might be stuck." + } + } + }, + "CancelTransactionResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + } + } + }, + "UnfreezeTransactionResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + } + } + }, + "FreezeTransactionResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + } + } + }, + "AmlScreeningResult": { + "type": "object", + "description": "The result of the AML screening.", + "properties": { + "provider": { + "type": "string" + }, + "payload": { + "type": "object" + } + } + }, + "FeeInfo": { + "type": "object", + "description": "Details of the transaction's fee.", + "properties": { + "networkFee": { + "description": "The fee paid to the network", + "type": "string" + }, + "serviceFee": { + "description": "The total fee deducted by the exchange from the actual requested amount (serviceFee = amount - netAmount)", + "type": "string" + }, + "gasPrice": { + "type": "string" + } + } + }, + "BlockInfo": { + "type": "object", + "description": "The block hash and height of the block that this transaction was mined in.\n **Note**: If an outgoing transaction uses the destinations object with more than one value in the array, blockHash is set to null.", + "properties": { + "blockHeight": { + "type": "string" + }, + "blockHash": { + "type": "string" + } + } + }, + "AuthorizationInfo": { + "type": "object", + "description": "The information about your [Transaction Authorization Policy (TAP).](https://developers.fireblocks.com/docs/capabilities#transaction-authorization-policy-tap)", + "properties": { + "allowOperatorAsAuthorizer": { + "type": "boolean" + }, + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ] + }, + "groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthorizationGroups" + } + } + } + }, + "AuthorizationGroups": { + "type": "object", + "properties": { + "th": { + "type": "number" + }, + "users": { + "type": "object", + "additionalProperties": { + "type": "string", + "enum": [ + "PENDING_AUTHORIZATION", + "APPROVED", + "REJECTED", + "NA" + ] + } + } + } + }, + "AmountInfo": { + "type": "object", + "description": "The details of the requested amount to transfer.", + "properties": { + "amount": { + "description": "If the transfer is a withdrawal from an exchange, the actual amount that was requested to be transferred. Otherwise, the requested amount.", + "type": "string" + }, + "requestedAmount": { + "description": "The amount requested by the user.", + "type": "string" + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction.", + "type": "string" + }, + "amountUSD": { + "description": "The USD value of the requested amount.", + "type": "string" + } + } + }, + "RewardInfo": { + "type": "object", + "description": "This field is relevant only for Algorand transactions. Both `srcRewards` and `destRewards` will appear only for Vault to Vault transactions, otherwise you will receive only the Fireblocks’ side of the transaction.", + "properties": { + "srcRewards": { + "type": "string" + }, + "destRewards": { + "type": "string" + } + } + }, + "SourceTransferPeerPathResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/TransferPeerPath" + }, + { + "type": "object", + "description": "The transaction’s source.", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name. In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + } + } + } + ] + }, + "DestinationTransferPeerPathResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/TransferPeerPath" + }, + { + "type": "object", + "description": "Destination of the transaction.\n\n**Note:** In case the transaction is sent to multiple destinations, the `destinations` parameter is be used instead of this.", + "properties": { + "type": { + "type": "string" + }, + "subType": { + "type": "string", + "description": "In case the type is set to `EXCHANGE_ACCOUNT` or `FIAT_ACCOUNT`, the specific exchange vendor name or fiat vendor name.In case the type is set to `INTERNAL_WALLET` or `EXTERNAL_WALLET`, the subType is set to `Internal` or `External`." + }, + "id": { + "type": "string", + "description": "The ID of the peer. You can retrieve the ID of each venue object using the endpoints for [listing vault accounts](https://developers.fireblocks.com/reference/get_vault-accounts-paged), [listing exchange account](https://developers.fireblocks.com/reference/get_exchange-accounts), [listing fiat accounts](https://developers.fireblocks.com/reference/get_fiat-accounts), [listing internal wallets](https://developers.fireblocks.com/reference/get_internal-wallets), [listing external wallets](https://developers.fireblocks.com/reference/get_external-wallets), [listing network connections](https://developers.fireblocks.com/reference/get_network-connections). For the other types, this parameter is not needed." + }, + "name": { + "type": "string", + "description": "The name of the peer." + } + } + } + ] + }, + "TransactionResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the transaction." + }, + "externalTxId": { + "type": "string", + "description": "Unique transaction ID provided by the user. Fireblocks highly recommends setting an `externalTxId` for every transaction created, to avoid submitting the same transaction twice." + }, + "status": { + "type": "string", + "description": "The primary status of the transaction. For details, see [Primary transaction statuses](https://developers.fireblocks.com/reference/primary-transaction-statuses)." + }, + "subStatus": { + "type": "string", + "description": "See [Transaction substatuses](https://developers.fireblocks.com/reference/transaction-substatuses) for the list of transaction sub statuses." + }, + "txHash": { + "type": "string", + "description": "The hash of the transaction on the blockchain.\n * This parameter exists if at least one of the following conditions is met:\n\n 1. The transaction’s source type is `UNKNOWN`, `WHITELISTED_ADDRESS`, `NETWORK_CONNECTION`, `ONE_TIME_ADDRESS`, `FIAT_ACCOUNT` or `GAS_STATION`.\n\n 2. The transaction’s source type is `VAULT` and the status is either: `CONFIRMING`, `COMPLETED`, or was in any of these statuses prior to changing to `FAILED` or `REJECTED`. In some instances, transactions in status `BROADCASTING` will include the txHash as well.\n\n 3. The transaction’s source type is `EXCHANGE_ACCOUNT` and the transaction’s destination type is `VAULT`, and the status is either: `CONFIRMING`, `COMPLETED`, or was in any of these status prior to changing to `FAILED`.\n \n\n* In addition, the following conditions must be met:\n\n 1. The asset is a crypto asset (not fiat).\n\n 2. The transaction operation is not RAW or `TYPED_MESSAGE`." + }, + "operation": { + "$ref": "#/components/schemas/GetTransactionOperation" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, that describes the transaction at your Fireblocks workspace." + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT`, `BURN`, `ENABLE_ASSET`,`STAKE` ,`UNSTAKE` or `WITHDRAW` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset" + }, + "source": { + "$ref": "#/components/schemas/SourceTransferPeerPathResponse" + }, + "sourceAddress": { + "type": "string", + "description": "For account based assets only, the source address of the transaction.\n**Note:** If the status is `CONFIRMING`, `COMPLETED`, or has been `CONFIRMING`; then moved forward to `FAILED` or `REJECTED`, then this parameter will contain the source address. In any other case, this parameter will be empty." + }, + "tag": { + "type": "string", + "description": "Source address tag for XRP, used as memo for EOS/XLM, or Bank Transfer Description for the fiat provider BLINC (by BCB Group)." + }, + "destination": { + "$ref": "#/components/schemas/DestinationTransferPeerPathResponse" + }, + "destinations": { + "type": "array", + "description": "The transaction’s destinations.\n**Note:** In case the transaction is sent to a single destination, the `destination` parameter is used instead of this.", + "items": { + "$ref": "#/components/schemas/TransactionResponseDestination" + } + }, + "destinationAddress": { + "type": "string", + "description": "Address where the asset were transferred.\nNotes:\n - For [Multi destination transactions](https://support.fireblocks.io/hc/en-us/articles/360018447980-Multi-destination-transactions), this parameter will be empty. In this case, you should refer to the destinations field.\n - If the status is `CONFIRMING`, `COMPLETED`, or has been `CONFIRMING`; then moved forward to `FAILED` or `REJECTED`, then this parameter will contain the destination address. In any other case, this parameter will be empty." + }, + "destinationAddressDescription": { + "type": "string", + "description": "Description of the address." + }, + "destinationTag": { + "type": "string", + "description": "Destination address tag for XRP, used as memo for EOS/XLM, or Bank Transfer Description for the fiat provider BLINC (by BCB Group)." + }, + "contractCallDecodedData": { + "description": "Decoded data for `CONTRACT_CALL` operations. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for setting this parameter's value.", + "type": "object", + "properties": { + "contractName": { + "type": "string" + }, + "functionCalls": { + "type": "array", + "items": { + "type": "object" + } + } + } + }, + "amountInfo": { + "$ref": "#/components/schemas/AmountInfo" + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "For transactions initiated via this Fireblocks workspace, when set to `true`, the fee is deducted from the requested amount.\n\n**Note**: This parameter can only be considered if a transaction's asset is a base asset, such as ETH or MATIC. If the asset can't be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account." + }, + "feeInfo": { + "$ref": "#/components/schemas/FeeInfo" + }, + "feeCurrency": { + "type": "string", + "description": "The asset which was withdrawn to pay the transaction fee, for example ETH for EVM-based blockchains, BTC for Tether Omni." + }, + "networkRecords": { + "type": "array", + "description": "In case a single transaction resulted with multiple transfers, for example a result of a contract call, then this parameter specifies each transfer that took place on the blockchain. In case of a single transfer transaction, this parameter is empty.", + "items": { + "$ref": "#/components/schemas/NetworkRecord" + } + }, + "createdAt": { + "type": "number", + "description": "The transaction’s creation date and time, in unix timestamp." + }, + "lastUpdated": { + "type": "number", + "description": "The transaction’s last update date and time, in unix timestamp." + }, + "createdBy": { + "type": "string", + "description": "User ID of the initiator of the transaction." + }, + "signedBy": { + "type": "array", + "description": "User ID’s of the signers of the transaction.", + "items": { + "type": "string" + } + }, + "rejectedBy": { + "type": "string", + "description": "User ID of the user that rejected the transaction (in case it was rejected)." + }, + "authorizationInfo": { + "$ref": "#/components/schemas/AuthorizationInfo" + }, + "exchangeTxId": { + "type": "string", + "description": "If the transaction originated from an exchange, this is the ID of this transaction at the exchange." + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions." + }, + "amlScreeningResult": { + "$ref": "#/components/schemas/AmlScreeningResult" + }, + "extraParameters": { + "$ref": "#/components/schemas/ExtraParameters" + }, + "signedMessages": { + "$ref": "#/components/schemas/SignedMessage" + }, + "numOfConfirmations": { + "type": "number", + "description": "The number of confirmations of the transaction. The number will increase until the transaction will be considered completed according to the confirmation policy." + }, + "blockInfo": { + "$ref": "#/components/schemas/BlockInfo" + }, + "index": { + "type": "number", + "description": "For UTXO based assets this is the vOut, for Ethereum based, this is the index of the event of the contract call.\n **Note:** This field is not returned if a transaction uses the `destinations` object with more than one value." + }, + "rewardInfo": { + "$ref": "#/components/schemas/RewardInfo" + }, + "systemMessages": { + "$ref": "#/components/schemas/SystemMessageInfo" + }, + "addressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME" + ] + }, + "requestedAmount": { + "description": "The amount requested by the user. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "amount": { + "description": "If the transfer is a withdrawal from an exchange, the actual amount that was requested to be transferred. Otherwise, the requested amount. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "amountUSD": { + "description": "The USD value of the requested amount. Deprecated - please use the `amountInfo` field for accuracy.", + "type": "number", + "nullable": true, + "deprecated": true + }, + "serviceFee": { + "description": "The total fee deducted by the exchange from the actual requested amount (`serviceFee` = `amount` - `netAmount`). Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "fee": { + "description": "Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + }, + "networkFee": { + "description": "The fee paid to the network. Deprecated - please use the `feeInfo` field for accuracy.", + "type": "number", + "deprecated": true + } + } + }, + "TransactionResponseDestination": { + "type": "object", + "properties": { + "destination": { + "$ref": "#/components/schemas/DestinationTransferPeerPathResponse" + }, + "destinationAddress": { + "description": "Address where the asset was transferred." + }, + "destinationAddressDescription": { + "description": "Description of the address." + }, + "amount": { + "type": "string", + "description": "The amount to be sent to this destination." + }, + "amountUSD": { + "type": "string", + "description": "The USD value of the requested amount." + }, + "amlScreeningResult": { + "$ref": "#/components/schemas/AmlScreeningResult" + }, + "customerRefId": { + "description": "The ID for AML providers to associate the owner of funds with transactions." + }, + "authorizationInfo": { + "$ref": "#/components/schemas/AuthorizationInfo" + } + } + }, + "NetworkRecord": { + "type": "object", + "properties": { + "source": { + "$ref": "#/components/schemas/SourceTransferPeerPathResponse" + }, + "destination": { + "$ref": "#/components/schemas/DestinationTransferPeerPathResponse" + }, + "txHash": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "assetId": { + "type": "string", + "x-fb-entity": "asset" + }, + "netAmount": { + "description": "The net amount of the transaction, after fee deduction", + "type": "string" + }, + "isDropped": { + "type": "boolean" + }, + "type": { + "type": "string" + }, + "destinationAddress": { + "type": "string" + }, + "sourceAddress": { + "type": "string" + }, + "amountUSD": { + "type": "string" + }, + "index": { + "type": "number" + }, + "rewardInfo": { + "$ref": "#/components/schemas/RewardInfo" + } + } + }, + "AssetTypeResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "ALGO_ASSET", + "BASE_ASSET", + "BEP20", + "COMPOUND", + "ERC20", + "FIAT", + "SOL_ASSET", + "TRON_TRC20", + "XLM_ASSET", + "XDB_ASSET" + ] + }, + "contractAddress": { + "type": "string" + }, + "nativeAsset": { + "type": "string" + }, + "decimals": { + "type": "number" + } + }, + "required": [ + "id", + "name", + "type" + ] + }, + "NetworkConnection": { + "type": "object", + "properties": { + "localNetworkId": { + "type": "string", + "description": "The network ID of the profile trying to create the connection." + }, + "remoteNetworkId": { + "type": "string", + "description": "The network ID the profile is attempting to connect to." + }, + "routingPolicy": { + "$ref": "#/components/schemas/NetworkConnectionRoutingPolicy" + } + }, + "required": [ + "localNetworkId", + "remoteNetworkId" + ] + }, + "NetworkConnectionResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "localChannel": { + "allOf": [ + { + "$ref": "#/components/schemas/NetworkChannel" + } + ], + "deprecated": true, + "description": "Deprecated - Replaced by `localNetworkId`" + }, + "remoteChannel": { + "allOf": [ + { + "$ref": "#/components/schemas/NetworkChannel" + } + ], + "deprecated": true, + "description": "Deprecated - Replaced by `remoteNetworkId`" + }, + "status": { + "$ref": "#/components/schemas/ConfigChangeRequestStatus" + }, + "localNetworkId": { + "$ref": "#/components/schemas/NetworkId" + }, + "remoteNetworkId": { + "$ref": "#/components/schemas/NetworkId" + }, + "routingPolicy": { + "$ref": "#/components/schemas/NetworkConnectionRoutingPolicy" + } + }, + "required": [ + "id", + "localNetworkId", + "remoteNetworkId", + "routingPolicy", + "status" + ] + }, + "EstimatedTransactionFeeResponse": { + "type": "object", + "properties": { + "low": { + "$ref": "#/components/schemas/TransactionFee" + }, + "medium": { + "$ref": "#/components/schemas/TransactionFee" + }, + "high": { + "$ref": "#/components/schemas/TransactionFee" + } + }, + "required": [ + "low", + "medium", + "high" + ] + }, + "EstimatedNetworkFeeResponse": { + "type": "object", + "properties": { + "low": { + "$ref": "#/components/schemas/NetworkFee" + }, + "medium": { + "$ref": "#/components/schemas/NetworkFee" + }, + "high": { + "$ref": "#/components/schemas/NetworkFee" + } + }, + "required": [ + "low", + "medium", + "high" + ] + }, + "GasStationPropertiesResponse": { + "type": "object", + "properties": { + "balance": { + "type": "object" + }, + "configuration": { + "$ref": "#/components/schemas/GasStationConfiguration" + } + }, + "required": [ + "low", + "medium", + "high" + ] + }, + "TransactionFee": { + "type": "object", + "properties": { + "feePerByte": { + "type": "string" + }, + "gasPrice": { + "type": "string" + }, + "gasLimit": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "baseFee": { + "description": "(optional) Base Fee according to EIP-1559 (ETH assets)", + "type": "string" + }, + "priorityFee": { + "description": "(optional) Priority Fee according to EIP-1559 (ETH assets)", + "type": "string" + } + } + }, + "NetworkFee": { + "type": "object", + "properties": { + "feePerByte": { + "type": "string" + }, + "gasPrice": { + "type": "string" + }, + "networkFee": { + "type": "string" + }, + "baseFee": { + "description": "(optional) Base Fee according to EIP-1559 (ETH assets)", + "type": "string" + }, + "priorityFee": { + "description": "(optional) Priority Fee according to EIP-1559 (ETH assets)", + "type": "string" + } + } + }, + "GasStationConfiguration": { + "type": "object", + "properties": { + "gasThreshold": { + "type": "string" + }, + "gasCap": { + "type": "string" + }, + "maxGasPrice": { + "type": "string" + } + } + }, + "NetworkChannel": { + "deprecated": true, + "description": "Deprecated in the only used reference - NetworkConnectionResponse", + "type": "object", + "properties": { + "networkId": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "NetworkId": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "NetworkIdResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/NetworkId" + }, + { + "type": "object", + "properties": { + "routingPolicy": { + "$ref": "#/components/schemas/NetworkIdRoutingPolicy" + }, + "isDiscoverable": { + "type": "boolean", + "description": "The specific network is discoverable." + } + } + } + ] + }, + "TransactionRequest": { + "type": "object", + "properties": { + "operation": { + "$ref": "#/components/schemas/TransactionOperation" + }, + "note": { + "type": "string", + "description": "Custom note, not sent to the blockchain, to describe the transaction at your Fireblocks workspace.", + "example": "Ticket 123" + }, + "externalTxId": { + "type": "string", + "description": "An optional but highly recommended parameter. Fireblocks will reject future transactions with same ID. \n \nYou should set this to a unique ID representing the transaction, to avoid submitting the same transaction twice. This helps with cases where submitting the transaction responds with an error code due to Internet interruptions, but the transaction was actually sent and processed. To validate whether a transaction has been processed, [Find a specific transaction by external transaction ID](https://developers.fireblocks.com/reference/get_transactions-external-tx-id-externaltxid).\n \nThere is no specific format required for this parameter.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "assetId": { + "type": "string", + "description": "The ID of the asset to transfer, for `TRANSFER`, `MINT` or `BURN` operations. [See the list of supported assets and their IDs on Fireblocks.](https://developers.fireblocks.com/reference/get_supported-assets)", + "x-fb-entity": "asset", + "example": "ETH" + }, + "source": { + "$ref": "#/components/schemas/TransferPeerPath" + }, + "destination": { + "$ref": "#/components/schemas/DestinationTransferPeerPath" + }, + "destinations": { + "type": "array", + "description": "For UTXO based blockchains, you can send a single transaction to multiple destinations.", + "items": { + "$ref": "#/components/schemas/TransactionRequestDestination" + } + }, + "amount": { + "description": "For `TRANSFER` operations, the requested amount to transfer, in the asset’s unit. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated.", + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "0.02" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 0.02 + } + ] + }, + "treatAsGrossAmount": { + "type": "boolean", + "description": "\"When set to `true`, the fee will be deducted from the requested amount.\"\n\n**Note**: This parameter can only be considered if a transaction’s asset is a base asset, such as ETH or MATIC. If the asset can’t be used for transaction fees, like USDC, this parameter is ignored and the fee is deducted from the relevant base asset wallet in the source account.", + "example": false + }, + "forceSweep": { + "type": "boolean", + "description": "For Polkadot, Kusama and Westend transactions only. When set to true, Fireblocks will empty the asset wallet.\n\n **Note:** If set to true when the source account is exactly 1 DOT, the transaction will fail. Any amount more or less than 1 DOT succeeds. This is a Polkadot blockchain limitation.", + "example": false + }, + "feeLevel": { + "type": "string", + "description": "For UTXO or EVM-based blockchains only. Defines the blockchain fee level which will be payed for the transaction. Alternatively, specific fee estimation parameters exist below.", + "enum": [ + "LOW", + "MEDIUM", + "HIGH" + ], + "example": "MEDIUM" + }, + "fee": { + "description": "For UTXO-based blockchains, the fee per bytes in the asset’s smallest unit (Satoshi, Latoshi, etc.). For Ripple, the fee for the transaction. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated.", + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ] + }, + "priorityFee": { + "description": "For Ethereum-based blockchains only, the fee for EIP-1559 transaction pricing mechanism. Value is in Gwei. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated.", + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "2" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 2 + } + ] + }, + "failOnLowFee": { + "type": "boolean", + "description": "When set to `true`, in case the current `MEDIUM` fee level is higher than the one specified in the transaction, the transaction will fail to avoid getting stuck with no confirmations." + }, + "maxFee": { + "description": "The maximum fee (gas price or fee per byte) that should be payed for the transaction. In case the current value of the requested `feeLevel` is higher than this requested maximum fee. Represented by a numeric string for accurate precision.", + "type": "string", + "example": "120" + }, + "gasLimit": { + "description": "For EVM-based blockchains only. Units of gas required to process the transaction. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated.", + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)", + "example": "21000" + }, + { + "type": "number", + "description": "Number (deprecated)", + "example": 21000 + } + ] + }, + "gasPrice": { + "description": "For non-EIP-1559, EVM-based transactions. Price per gas unit (in Ethereum this is specified in Gwei). Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated.", + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ] + }, + "networkFee": { + "description": "For EVM-based blockchains only. The total transaction fee in the blockchain’s largest unit. Note: Only two of the three arguments can be specified in a single transaction: `gasLimit`, `gasPrice` and `networkFee`. Fireblocks recommends using a numeric string for accurate precision. Although a number input exists, it is deprecated. - The transaction blockchain fee.\n- For Ethereum, you can't pass gasPrice, gasLimit and networkFee all together.\n- A numeric value representation is required.", + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ] + }, + "replaceTxByHash": { + "type": "string", + "description": "For EVM-based blockchains only. In case a transaction is stuck, specify the hash of the stuck transaction to replace it by this transaction with a higher fee, or to replace it with this transaction with a zero fee and drop it from the blockchain.", + "example": "00000000-0000-0000-0000-000000000000" + }, + "extraParameters": { + "$ref": "#/components/schemas/ExtraParameters" + }, + "customerRefId": { + "type": "string", + "description": "The ID for AML providers to associate the owner of funds with transactions.", + "example": "abcdef" + }, + "autoStaking": { + "type": "boolean", + "description": "This feature is no longer supported.", + "deprecated": true + }, + "networkStaking": { + "deprecated": true, + "description": "This feature is no longer supported.", + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ] + }, + "cpuStaking": { + "deprecated": true, + "description": "This feature is no longer supported.", + "oneOf": [ + { + "type": "string", + "description": "Numeric string (recommended)" + }, + { + "type": "number", + "description": "Number (deprecated)" + } + ] + } + } + }, + "TransactionRequestDestination": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "destination": { + "$ref": "#/components/schemas/DestinationTransferPeerPath" + } + } + }, + "ExchangeType": { + "type": "string", + "enum": [ + "BINANCE", + "BINANCEUS", + "BITFINEX", + "BITHUMB", + "BITMEX", + "BITSO", + "BITSTAMP", + "BITTREX", + "CIRCLE", + "COINBASEPRO", + "COINMETRO", + "COINSPRO", + "CRYPTOCOM", + "DERIBIT", + "FTX", + "FIXUS", + "GEMINI", + "HITBTC", + "HUOBI", + "KORBIT", + "KRAKEN", + "LIQUID", + "POLONIEX", + "OKCOIN", + "OKEX", + "SEEDCX" + ] + }, + "FiatAccountType": { + "type": "string", + "enum": [ + "BLINC" + ] + }, + "ConfigChangeRequestStatus": { + "type": "string", + "enum": [ + "WAITING_FOR_APPROVAL", + "APPROVED", + "CANCELLED", + "REJECTED", + "FAILED" + ] + }, + "TransactionOperation": { + "type": "string", + "default": "TRANSFER", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE" + ], + "description": "* `TRANSFER` - The default value for an operation. Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n" + }, + "GetTransactionOperation": { + "type": "string", + "enum": [ + "TRANSFER", + "BURN", + "CONTRACT_CALL", + "MINT", + "RAW", + "TYPED_MESSAGE", + "ENABLE_ASSET", + "STAKE", + "UNSTAKE", + "WITHDRAW", + "REDEEM_FROM_COMPOUND", + "SUPPLY_TO_COMPOUND" + ], + "description": "* `TRANSFER` - Transfers funds from one account to another. UTXO blockchains allow multi-input and multi-output transfers. All other blockchains allow transfers with one source address and one destination address.\n* `MINT` - Mints new tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `BURN` - Burns tokens. Supported for Stellar, Ripple and EVM-based blockchains.\n* `CONTRACT_CALL` - Calls a smart contract method for web3 operations on any EVM blockchain. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n* `TYPED_MESSAGE` - An off-chain message in either Ethereum Personal Message or EIP712 format. Use it to sign specific readable messages that are not actual transactions. [Learn more about typed messages](https://developers.fireblocks.com/docs/typed-message-signing).\n* `RAW` - An off-chain message with no predefined format. Use it to sign any message with your private key, including protocols such as blockchains and custom transaction types that are not natively supported by Fireblocks. [Learn more about raw signing transactions.](https://developers.fireblocks.com/docs/raw-message-signing)\n* `ENABLE_ASSET` - Algorand, DigitalBits, Solana, and Stellar require an on-chain transaction to create an asset wallet and enable the deposit address. This transaction is automatically created when adding assets on these blockchains at a vault account.\n* `STAKE` - Assign assets to a staking pool managed by a staking validator. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n* `UNSTAKE` - Remove assets from a staking pool managed by a staking validator. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n* `WITHDRAW` - Transfer assets from a dedicated staking vault account to another address. Supported for Stellar and EVM-based blockchains. This transaction is automatically created when performing staking operations.\n\n **Note:** Fireblocks will rename this type from `WITHDRAW` to a different type name soon. There will be a 7-day notice regarding the new type name.\n\n* `SUPPLY_TO_COMPOUND` - Deprecated since April 1st, 2023. Older transactions may have this as their operation, in case users in the workspace have used the direct integration between Fireblocks and the Compound DeFI protocol.\n* `REDEEM_FROM_COMPOUND` - Deprecated since April 1st, 2023. Older transactions may have this as their operation, in case users in the workspace have used the direct integration between Fireblocks and the Compound DeFI protocol.\n" + }, + "Error": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "code": { + "type": "number" + } + } + }, + "Term": { + "type": "object", + "properties": { + "networkConnectionId": { + "type": "string" + }, + "outgoing": { + "type": "boolean" + }, + "asset": { + "type": "string" + }, + "amount": { + "type": "string" + }, + "note": { + "type": "string" + }, + "operation": { + "type": "string" + } + } + }, + "SetConfirmationsThresholdRequest": { + "type": "object", + "properties": { + "numOfConfirmations": { + "type": "number" + } + } + }, + "SetConfirmationsThresholdResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "transactions": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "DropTransactionRequest": { + "type": "object", + "properties": { + "txId": { + "type": "string" + }, + "feeLevel": { + "type": "string" + }, + "gasPrice": { + "type": "string" + } + } + }, + "DropTransactionResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "transactions": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "UnsignedMessage": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "bip44addressIndex": { + "type": "integer" + }, + "bip44change": { + "type": "number" + }, + "derivationPath": { + "type": "array", + "items": { + "type": "number" + } + } + }, + "required": [ + "content" + ] + }, + "SignedMessage": { + "type": "object", + "description": "A list of signed messages returned for raw signing.", + "properties": { + "content": { + "type": "string" + }, + "algorithm": { + "type": "string", + "enum": [ + "MPC_ECDSA_SECP256K1", + "MPC_EDDSA_ED25519" + ] + }, + "derivationPath": { + "type": "array", + "items": { + "type": "number" + } + }, + "signature": { + "type": "object", + "properties": { + "fullSig": { + "type": "string" + }, + "r": { + "type": "string" + }, + "s": { + "type": "string" + }, + "v": { + "type": "number" + } + } + }, + "publicKey": { + "type": "string" + } + } + }, + "PublicKeyInformation": { + "type": "object", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "array", + "items": { + "type": "number" + } + }, + "publicKey": { + "type": "string" + } + } + }, + "TradingAccountType": { + "type": "string", + "enum": [ + "COIN_FUTURES", + "COIN_MARGINED_SWAP", + "EXCHANGE", + "FUNDING", + "FUNDABLE", + "FUTURES", + "FUTURES_CROSS", + "MARGIN", + "MARGIN_CROSS", + "OPTIONS", + "SPOT", + "USDT_MARGINED_SWAP_CROSS", + "USDT_FUTURES", + "UNIFIED" + ] + }, + "ValidateAddressResponse": { + "type": "object", + "properties": { + "isValid": { + "type": "boolean" + }, + "isActive": { + "type": "boolean" + }, + "requiresTag": { + "type": "boolean" + } + } + }, + "ResendWebhooksResponse": { + "type": "object", + "properties": { + "messagesCount": { + "type": "number" + } + } + }, + "UnspentInputsResponse": { + "type": "object", + "properties": { + "input": { + "$ref": "#/components/schemas/UnspentInput" + }, + "address": { + "type": "string" + }, + "amount": { + "type": "string" + }, + "confirmations": { + "type": "number" + }, + "status": { + "type": "string" + } + } + }, + "UnspentInput": { + "type": "object", + "properties": { + "txHash": { + "type": "string" + }, + "index": { + "type": "number" + } + } + }, + "GetUsersResponse": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserResponse" + } + } + } + }, + "ExtraParameters": { + "type": "object", + "properties": {}, + "description": "Additional protocol / operation specific key-value parameters:\n\nFor UTXO-based blockchain input selection, add the key `inputsSelection` with the value set the [input selection structure.](https://developers.fireblocks.com/reference/transaction-objects#inputsselection) The inputs can be retrieved from the [Retrieve Unspent Inputs endpoint.](https://developers.fireblocks.com/reference/get_vault-accounts-vaultaccountid-assetid-unspent-inputs)\n\nFor `RAW` operations, add the key `rawMessageData` with the value set to the [raw message data structure.](https://developers.fireblocks.com/reference/raw-signing-objects#rawmessagedata)\n\nFor `CONTRACT_CALL` operations, add the key `contractCallData` with the value set to the Ethereum smart contract Application Binary Interface (ABI) payload. The Fireblocks [development libraries](https://developers.fireblocks.com/docs/ethereum-development#convenience-libraries) are recommended for building contract call transactions.\n" + }, + "NetworkIdRoutingPolicy": { + "type": "object", + "properties": { + "crypto": { + "oneOf": [ + { + "$ref": "#/components/schemas/CustomCryptoRoutingDest" + }, + { + "$ref": "#/components/schemas/NoneNetworkRoutingDest" + } + ] + }, + "sen": { + "oneOf": [ + { + "$ref": "#/components/schemas/CustomFiatRoutingDest" + }, + { + "$ref": "#/components/schemas/NoneNetworkRoutingDest" + } + ] + }, + "signet": { + "oneOf": [ + { + "$ref": "#/components/schemas/CustomFiatRoutingDest" + }, + { + "$ref": "#/components/schemas/NoneNetworkRoutingDest" + } + ] + }, + "sen_test": { + "oneOf": [ + { + "$ref": "#/components/schemas/NoneNetworkRoutingDest" + }, + { + "$ref": "#/components/schemas/CustomFiatRoutingDest" + } + ] + }, + "signet_test": { + "oneOf": [ + { + "$ref": "#/components/schemas/NoneNetworkRoutingDest" + }, + { + "$ref": "#/components/schemas/CustomFiatRoutingDest" + } + ] + } + } + }, + "NetworkConnectionRoutingPolicy": { + "type": "object", + "properties": { + "crypto": { + "oneOf": [ + { + "$ref": "#/components/schemas/CustomCryptoRoutingDest" + }, + { + "$ref": "#/components/schemas/DefaultNetworkRoutingDest" + }, + { + "$ref": "#/components/schemas/NoneNetworkRoutingDest" + } + ] + }, + "sen": { + "oneOf": [ + { + "$ref": "#/components/schemas/CustomFiatRoutingDest" + }, + { + "$ref": "#/components/schemas/DefaultNetworkRoutingDest" + }, + { + "$ref": "#/components/schemas/NoneNetworkRoutingDest" + } + ] + }, + "signet": { + "oneOf": [ + { + "$ref": "#/components/schemas/DefaultNetworkRoutingDest" + }, + { + "$ref": "#/components/schemas/CustomFiatRoutingDest" + }, + { + "$ref": "#/components/schemas/NoneNetworkRoutingDest" + } + ] + }, + "sen_test": { + "oneOf": [ + { + "$ref": "#/components/schemas/DefaultNetworkRoutingDest" + }, + { + "$ref": "#/components/schemas/NoneNetworkRoutingDest" + }, + { + "$ref": "#/components/schemas/CustomFiatRoutingDest" + } + ] + }, + "signet_test": { + "oneOf": [ + { + "$ref": "#/components/schemas/NoneNetworkRoutingDest" + }, + { + "$ref": "#/components/schemas/CustomFiatRoutingDest" + }, + { + "$ref": "#/components/schemas/DefaultNetworkRoutingDest" + } + ] + } + } + }, + "CustomFiatRoutingDest": { + "type": "object", + "properties": { + "scheme": { + "description": "The network routing logic.", + "type": "string", + "enum": [ + "CUSTOM" + ] + }, + "dstType": { + "type": "string", + "description": "The fiat account the funds are being sent to.", + "enum": [ + "FIAT_ACCOUNT" + ] + }, + "dstId": { + "type": "string", + "description": "The ID of the fiat account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + "CustomCryptoRoutingDest": { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "description": "The network routing logic.", + "enum": [ + "CUSTOM" + ] + }, + "dstType": { + "type": "string", + "description": "The type of destination account the funds are being sent to.", + "enum": [ + "VAULT", + "EXCHANGE" + ] + }, + "dstId": { + "type": "string", + "description": "The ID of the destination account the funds are being sent to." + } + }, + "required": [ + "scheme", + "dstType", + "dstId" + ] + }, + "DefaultNetworkRoutingDest": { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "description": "The network routing logic.", + "enum": [ + "DEFAULT" + ] + } + }, + "required": [ + "scheme" + ] + }, + "NoneNetworkRoutingDest": { + "type": "object", + "properties": { + "scheme": { + "type": "string", + "description": "No network routing logic.", + "enum": [ + "NONE" + ] + } + }, + "required": [ + "scheme" + ] + }, + "UserResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "role": { + "type": "string" + }, + "email": { + "type": "string" + }, + "enabled": { + "type": "boolean" + } + } + }, + "SessionMetadata": { + "type": "object", + "properties": { + "appUrl": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "appDescription": { + "type": "string" + }, + "appIcon": { + "type": "string" + } + }, + "required": [ + "appUrl" + ] + }, + "SessionDTO": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Id of the connection", + "example": "4e9e7051-f3b2-48e9-8ee6-b12492552657" + }, + "userId": { + "type": "string", + "description": "Id of the user that created the connection" + }, + "sessionMetadata": { + "description": "Metadata of the connection (provided by the dapp)", + "allOf": [ + { + "$ref": "#/components/schemas/SessionMetadata" + } + ] + }, + "vaultAccountId": { + "type": "number", + "description": "The vault to connect", + "example": 1 + }, + "feeLevel": { + "type": "string", + "description": "The default fee level", + "example": "MEDIUM", + "enum": [ + "MEDIUM", + "HIGH" + ] + }, + "chainIds": { + "description": "The chains approved for the connection", + "example": [ + "ETH", + "ETH_TEST", + "SOL" + ], + "type": "array", + "items": { + "type": "string" + } + }, + "connectionType": { + "type": "string", + "description": "The connection's type", + "example": "WalletConnect", + "enum": [ + "WalletConnect" + ] + }, + "connectionMethod": { + "type": "string", + "description": "The method through which the connection was established", + "example": "API", + "enum": [ + "DESKTOP", + "MOBILE", + "API" + ] + }, + "creationDate": { + "format": "date-time", + "type": "string", + "description": "Timestamp of the session's creation" + } + }, + "required": [ + "id", + "userId", + "sessionMetadata", + "vaultAccountId", + "feeLevel", + "chainIds", + "connectionType", + "connectionMethod", + "creationDate" + ] + }, + "GetConnectionsResponse": { + "type": "object", + "properties": { + "data": { + "description": "Array with the requested Web3 connection's data", + "type": "array", + "items": { + "$ref": "#/components/schemas/SessionDTO" + } + }, + "paging": { + "$ref": "#/components/schemas/Paging" + } + }, + "required": [ + "data" + ] + }, + "CreateConnectionRequest": { + "type": "object", + "properties": { + "vaultAccountId": { + "type": "number", + "description": "The ID of the vault to connect to the Web3 connection.", + "example": 1 + }, + "feeLevel": { + "type": "string", + "description": "The default fee level. Valid values are `MEDIUM` and `HIGH`.", + "example": "MEDIUM", + "enum": [ + "MEDIUM", + "HIGH" + ] + }, + "uri": { + "type": "string", + "description": "The WalletConnect uri provided by the dapp.", + "example": "wc:77752975-906f-48f5-b59f-047826ee947e@1?bridge=https%3A%2F%2F0.bridge.walletconnect.org&key=64be99adc6086b7a729b0ec8c7e1f174927ab92e84f5c6f9527050225344a637" + }, + "chainIds": { + "description": "The ID of the blockchain network used in the Web3 connection.", + "example": [ + "ETH", + "ETH_TEST" + ], + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "vaultAccountId", + "feeLevel", + "uri", + "chainIds" + ] + }, + "CreateConnectionResponse": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the Web3 connection initiated.", + "example": "4e9e7051-f3b2-48e9-8ee6-b12492552657" + }, + "sessionMetadata": { + "description": "Metadata of the Web3 connection (provided by the DApp).", + "allOf": [ + { + "$ref": "#/components/schemas/SessionMetadata" + } + ] + } + }, + "required": [ + "id", + "sessionMetadata" + ] + }, + "RespondToConnectionRequest": { + "type": "object", + "properties": { + "approve": { + "type": "boolean", + "description": "Approval of the initiated Web3 connection.", + "example": true + } + }, + "required": [ + "approve" + ] + }, + "AddCollateralRequestBody": { + "type": "object", + "properties": { + "transactionRequest": { + "$ref": "#/components/schemas/TransactionRequest" + }, + "isSrcCollateral": { + "type": "boolean", + "description": "optional" + } + } + }, + "RemoveCollateralRequestBody": { + "type": "object", + "properties": { + "transactionRequest": { + "$ref": "#/components/schemas/TransactionRequest" + }, + "isDstCollateral": { + "type": "boolean", + "description": "optional" + } + } + }, + "SettlementRequestBody": { + "type": "object", + "properties": { + "mainExchangeAccountId": { + "type": "string" + } + } + }, + "SettlementResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "initiator": { + "type": "string" + }, + "exchangeReply": { + "type": "string" + }, + "fireblocksInitiatedTransactions": { + "type": "object" + }, + "exchangeRequestedTransactions": { + "$ref": "#/components/schemas/SettlementResponse" + } + } + }, + "GetSettlementResponse": { + "$ref": "#/components/schemas/SettlementResponse" + }, + "ToExchangeTransaction": { + "type": "object", + "properties": { + "assetId": { + "type": "string" + }, + "amount": { + "type": "string" + }, + "dstAddress": { + "type": "string" + }, + "dstTag": { + "type": "string", + "description": "optional" + } + } + }, + "ToCollateralTransaction": { + "type": "object", + "properties": { + "asset": { + "type": "string" + }, + "amount": { + "type": "string" + }, + "srcAddress": { + "type": "string" + }, + "srcTag": { + "type": "string", + "description": "optional" + }, + "fee": { + "type": "string", + "description": "optional" + } + } + }, + "XBSettlementConfigCreationRequestBody": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name for the cross-border settlement configuration" + }, + "corridorId": { + "$ref": "#/components/schemas/XBSettlementCorridorId" + }, + "steps": { + "$ref": "#/components/schemas/XBSettlementConfigStepsRecord" + }, + "conversionSlippageBasisPoints": { + "$ref": "#/components/schemas/XBSettlementConversionSlippageBasisPoints" + } + }, + "required": [ + "name", + "corridorId", + "steps" + ] + }, + "XBSettlementConfigCreationResponse": { + "$ref": "#/components/schemas/XBSettlementConfigModel" + }, + "XBSettlementConfigEditRequestBody": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name for the cross-border settlement configuration" + }, + "steps": { + "$ref": "#/components/schemas/XBSettlementConfigStepsRecord" + }, + "conversionSlippageBasisPoints": { + "$ref": "#/components/schemas/XBSettlementConversionSlippageBasisPoints" + } + }, + "required": [ + "name", + "steps" + ] + }, + "XBSettlementConfigEditResponse": { + "$ref": "#/components/schemas/XBSettlementConfigModel" + }, + "XBSettlementConfigDeletionResponse": { + "$ref": "#/components/schemas/XBSettlementConfigModel" + }, + "XBSettlementGetConfigResponse": { + "$ref": "#/components/schemas/XBSettlementConfigModel" + }, + "XBSettlementGetAllConfigsResponse": { + "type": "object", + "properties": { + "configurations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/XBSettlementConfigModel" + } + } + }, + "required": [ + "configurations" + ] + }, + "XBSettlementFlowExecutionRequestBody": { + "type": "object", + "properties": { + "conversionSlippageBasisPoints": { + "$ref": "#/components/schemas/XBSettlementConversionSlippageBasisPoints" + } + } + }, + "XBSettlementFlowExecutionResponse": { + "$ref": "#/components/schemas/XBSettlementFlowExecutionModel" + }, + "XBSettlementFlowExecutionStep": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "A unique id for the step execution" + }, + "accountId": { + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/XBSettlementFlowExecutionStepStatus" + }, + "inputAmount": { + "$ref": "#/components/schemas/XBSettlementAsset" + }, + "outputAmount": { + "$ref": "#/components/schemas/XBSettlementAsset" + }, + "fee": { + "$ref": "#/components/schemas/XBSettlementAsset" + }, + "startedAt": { + "type": "number", + "description": "The step execution start time in epoch format." + }, + "completedAt": { + "type": "number", + "description": "The step execution end time in epoch format." + }, + "isSignRequired": { + "type": "boolean", + "description": "Whether or not signing is required for executing the step." + } + }, + "required": [ + "id", + "accountId", + "status", + "inputAmount", + "isSignRequired" + ] + }, + "XBSettlementFlowExecutionStepStatus": { + "type": "string", + "enum": [ + "NOT_STARTED", + "PROCESSING", + "COMPLETED", + "FAILED" + ] + }, + "XBSettlementFlowExecutionStatus": { + "type": "string", + "enum": [ + "NOT_LAUNCHED", + "PROCESSING", + "COMPLETED", + "FAILED" + ] + }, + "XBSettlementConfigId": { + "type": "string", + "format": "uuid", + "description": "Cross Bodrder configuraion unique id" + }, + "XBSettlementConfigModel": { + "type": "object", + "properties": { + "configId": { + "$ref": "#/components/schemas/XBSettlementConfigId" + }, + "corridorId": { + "$ref": "#/components/schemas/XBSettlementCorridorId" + }, + "name": { + "type": "string", + "description": "The name for the cross-border ettlement configuration" + }, + "steps": { + "$ref": "#/components/schemas/XBSettlementConfigStepsRecord" + }, + "conversionSlippageBasisPoints": { + "$ref": "#/components/schemas/XBSettlementConversionSlippageBasisPoints" + }, + "createdAt": { + "type": "number", + "description": "The creation time in epoch format." + } + }, + "required": [ + "configId", + "name", + "corridorId", + "steps", + "conversionSlippageBasisPoints", + "createdAt" + ] + }, + "XBSettlementCorridorId": { + "type": "string", + "enum": [ + "MX_US", + "CO_US", + "US_MX", + "US_EU", + "US_UK" + ], + "description": "- MX_US : Mexico (MXN) to USA (USD)\n- CO_US : Colombia (COP) to USA (USD)\n- US_MX : USA (USD) to Mexico (MXN)\n- US_EU : USA (USD) to Europe Union (EUR)\n- US_UK : USA (USD) to United Kingdon (GBP)\n" + }, + "XBSettlementConfigStep": { + "type": "object", + "properties": { + "stepType": { + "$ref": "#/components/schemas/XBSettlementStepType" + }, + "accountId": { + "type": "string" + } + }, + "required": [ + "stepType", + "accountId" + ] + }, + "XBSettlementStepType": { + "type": "string", + "enum": [ + "ON_RAMP", + "VAULT_ACCOUNT", + "OFF_RAMP", + "FIAT_DESTINATION" + ], + "description": "- ON_RAMP : A service that allows for the exchange of fiat currencies for cryptocurrencies. An OnRamp input value will always be fiat and output value crypto asset.\n- VAULT_ACCOUNT : Fireblocks Vault account\n- OFF_RAMP : A service that allows for the exchange of cryptocurrencies for fiat. An OffRamp input value will always be a crypto asset and output value be fiat.\n- FIAT_DESTINATION : Fiat account\n" + }, + "XBSettlementFlowSetupStep": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAmount": { + "$ref": "#/components/schemas/XBSettlementAsset" + }, + "outputAmount": { + "$ref": "#/components/schemas/XBSettlementAsset" + }, + "estimatedFeeAmount": { + "$ref": "#/components/schemas/XBSettlementAsset" + }, + "estimatedTime": { + "type": "number", + "description": "The estimated time for executing the step." + }, + "isSignRequired": { + "type": "boolean", + "description": "Whether or not signing is required for executing the step." + } + }, + "required": [ + "accountId", + "inputAmount", + "outputAmount", + "estimatedFeeAmount", + "estimatedTime", + "isSignRequired" + ] + }, + "XBSettlementGetFlowResponse": { + "type": "object", + "properties": { + "preview": { + "$ref": "#/components/schemas/XBSettlementFlowPreviewModel" + }, + "execution": { + "$ref": "#/components/schemas/XBSettlementFlowExecutionModel" + } + } + }, + "XBSettlementFlowPreviewModel": { + "type": "object", + "properties": { + "flowId": { + "type": "string", + "description": "The unique id for the cross-border flow." + }, + "configId": { + "$ref": "#/components/schemas/XBSettlementConfigId" + }, + "conversionRate": { + "type": "string", + "description": "The conversion rate received from the on-ramp or off-ramp." + }, + "inputAmount": { + "$ref": "#/components/schemas/XBSettlementAsset" + }, + "estimatedOutputAmount": { + "$ref": "#/components/schemas/XBSettlementAsset" + }, + "totalEstimatedFee": { + "$ref": "#/components/schemas/XBSettlementAsset" + }, + "totalEstimatedTime": { + "type": "number", + "description": "The total *estimated* time for executing the cross-border flow." + }, + "steps": { + "$ref": "#/components/schemas/XBSettlementFlowStepsRecord" + } + }, + "required": [ + "flowId", + "configId", + "steps", + "inputAmount", + "estimatedOutputAmount", + "totalEstimatedFee", + "totalEstimatedTime", + "conversionRate" + ] + }, + "XBSettlementCreateFlowRequestBody": { + "type": "object", + "properties": { + "configId": { + "$ref": "#/components/schemas/XBSettlementConfigId" + }, + "amount": { + "type": "string", + "description": "The amount to transfer in this cross-border flow. The type of asset is defined by the cross-border settlement configuration." + } + }, + "required": [ + "configId", + "amount" + ] + }, + "XBSettlementCreateFlowResponse": { + "$ref": "#/components/schemas/XBSettlementFlowPreviewModel" + }, + "XBSettlementFlowExecutionModel": { + "type": "object", + "properties": { + "flowId": { + "type": "string", + "description": "The unique id for the cross-border flow." + }, + "configId": { + "$ref": "#/components/schemas/XBSettlementConfigId" + }, + "inputAmount": { + "$ref": "#/components/schemas/XBSettlementAsset" + }, + "outputAmount": { + "$ref": "#/components/schemas/XBSettlementAsset" + }, + "totalFee": { + "$ref": "#/components/schemas/XBSettlementAsset" + }, + "initiatedAt": { + "type": "number", + "description": "The time the cross-border flow executed in epoch format." + }, + "initiatedBy": { + "description": "The id of the user which launched the flow", + "type": "string" + }, + "state": { + "$ref": "#/components/schemas/XBSettlementFlowExecutionStatus" + }, + "steps": { + "$ref": "#/components/schemas/XBSettlementFlowStepsExecutionRecord" + }, + "selectedConversionSlippage": { + "type": "object", + "description": "Indicates the selected slippage used during the flow since override logic may have taken place.", + "properties": { + "basisPoints": { + "type": "number" + }, + "reason": { + "$ref": "#/components/schemas/XBSettlementFlowSelectedConversionSlippageReason" + } + }, + "required": [ + "basisPoints", + "reason" + ] + } + }, + "required": [ + "flowId", + "configId", + "steps", + "inputAmount", + "outputAmount", + "totalFee", + "initiatedAt", + "initiatedBy", + "state", + "selectedConversionSlippage" + ] + }, + "XBSettlementFlowSelectedConversionSlippageReason": { + "type": "string", + "enum": [ + "DEFAULT", + "CONFIG", + "FLOW" + ] + }, + "XBSettlementFlowStepsExecutionRecord": { + "type": "object", + "properties": { + "stepType": { + "$ref": "#/components/schemas/XBSettlementStepType" + } + }, + "additionalProperties": { + "$ref": "#/components/schemas/XBSettlementFlowExecutionStep" + } + }, + "XBSettlementConfigStepsRecord": { + "type": "object", + "properties": { + "stepType": { + "$ref": "#/components/schemas/XBSettlementStepType" + } + }, + "additionalProperties": { + "type": "object", + "properties": { + "accountId": { + "type": "string" + }, + "inputAssetId": { + "$ref": "#/components/schemas/XBSettlementAssetID" + }, + "outputAssetId": { + "$ref": "#/components/schemas/XBSettlementAssetID" + } + }, + "required": [ + "accountId" + ] + } + }, + "XBSettlementConversionSlippageBasisPoints": { + "type": "integer", + "minimum": 0, + "maximum": 10000, + "default": 10000, + "description": "Slippage configuarion in basis points, the default value is 10%\n" + }, + "XBSettlementFlowStepsRecord": { + "type": "object", + "properties": { + "stepType": { + "$ref": "#/components/schemas/XBSettlementStepType" + } + }, + "additionalProperties": { + "$ref": "#/components/schemas/XBSettlementFlowSetupStep" + } + }, + "XBSettlementAsset": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": { + "$ref": "#/components/schemas/XBSettlementAssetID" + } + }, + "required": [ + "amount" + ] + }, + "XBSettlementAssetID": { + "oneOf": [ + { + "$ref": "#/components/schemas/XBSettlementFiatAsset" + }, + { + "$ref": "#/components/schemas/XBSettlementCryptoAsset" + } + ] + }, + "XBSettlementFiatAsset": { + "type": "string", + "enum": [ + "USD", + "MXN", + "COP", + "EUR", + "GBP" + ] + }, + "XBSettlementCryptoAsset": { + "type": "string", + "enum": [ + "XLM_USDC_5F3T", + "XLM" + ], + "description": "- XLM_USDC_5F3T : USDC over Stellar network\n" + }, + "CreatePayoutRequest": { + "type": "object", + "properties": { + "paymentAccount": { + "$ref": "#/components/schemas/PaymentAccount" + }, + "instructionSet": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PayoutInstruction" + } + } + }, + "required": [ + "paymentAccount", + "instructionSet" + ] + }, + "PaymentAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/PaymentAccountType" + } + }, + "required": [ + "id", + "type" + ] + }, + "PayoutInstruction": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "payeeAccount": { + "$ref": "#/components/schemas/PayeeAccount" + }, + "amount": { + "$ref": "#/components/schemas/InstructionAmount" + } + }, + "required": [ + "amount", + "payeeAccount" + ] + }, + "PaymentAccountType": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "FIAT_ACCOUNT" + ] + }, + "PayeeAccount": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/PayeeAccountType" + } + }, + "required": [ + "id", + "type" + ] + }, + "InstructionAmount": { + "type": "object", + "properties": { + "amount": { + "type": "string" + }, + "assetId": { + "type": "string" + } + }, + "required": [ + "amount", + "assetId" + ] + }, + "PayeeAccountType": { + "type": "string", + "enum": [ + "VAULT_ACCOUNT", + "EXCHANGE_ACCOUNT", + "INTERNAL_WALLET", + "EXTERNAL_WALLET", + "NETWORK_CONNECTION", + "FIAT_ACCOUNT" + ], + "description": "- VAULT_ACCOUNT \ta native Fireblocks vault account\n- EXCHANGE_ACCOUNT \ta third-party exchange account\n- INTERNAL_WALLET \ta whitelisted address marked as internal to the workspace/organization\n- EXTERNAL_WALLET\ta whitelisted address marked as external\n- NETWORK_CONNECTION\ta member of the Fireblocks network\n- FIAT_ACCOUNT\ta third-party account of a fiat bank (Signature, BCB, etc)\n" + }, + "PayoutResponse": { + "type": "object", + "properties": { + "payoutId": { + "type": "string" + }, + "paymentAccount": { + "$ref": "#/components/schemas/PaymentAccountResponse" + }, + "createdAt": { + "type": "number" + }, + "state": { + "$ref": "#/components/schemas/PayoutState" + }, + "status": { + "$ref": "#/components/schemas/PayoutStatus" + }, + "reasonOfFailure": { + "type": "string", + "description": "
    \n
  • INSUFFICIENT_BALANCE
  • \n
  • SOURCE_TRANSLATION
  • \n
  • SOURCE_NOT_UNIQUE
  • \n
  • SOURCE_NOT_FOUND
  • \n
  • SOURCE_TYPE_NOT_SUPPORTED
  • \n
  • EMPTY_SOURCE
  • \n
  • DESTINATION_TRANSLATION
  • \n
  • DESTINATION_NOT_UNIQUE
  • \n
  • DESTINATION_NOT_FOUND
  • \n
  • EMPTY_DESTINATION
  • \n
  • PARSING
  • \n
  • UNKNOWN
  • \n
  • FIREBLOCKS_CLIENT
  • \n
  • TRANSACTION_SUBMISSION
  • \n
\n" + }, + "initMethod": { + "$ref": "#/components/schemas/PayoutInitMethod" + }, + "instructionSet": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PayoutInstructionResponse" + } + }, + "reportUrl": { + "type": "string" + } + }, + "required": [ + "payoutId", + "createdAt", + "state", + "status", + "paymentAccount", + "instructionSet" + ] + }, + "PaymentAccountResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/PaymentAccountType" + } + } + }, + "PayoutState": { + "type": "string", + "enum": [ + "CREATED", + "FILE_FOUND", + "REQUESTED", + "TRANSLATED", + "PROCESSING", + "SUBMITTED", + "FINALIZED", + "INSUFFICIENT_BALANCE", + "FAILED" + ], + "description": "- CREATED - payout instruction set created with all its details\n- FILE_FOUND - new file found in the FTP\n- REQUESTED - payout requested with all its details\n- TRANSLATED - payout instruction account IDs identified and translated\n- PROCESSING - payout instruction set executed and is processing\n- SUBMITTED - transactions submitted for payout instructions\n- FINALIZED - payout finished processing, all transactions processed successfully\n- INSUFFICIENT_BALANCE - insufficient balance in the payment account (can be a temporary state)\n- FAILED - one or more of the payout instructions failed\n" + }, + "PayoutStatus": { + "type": "string", + "enum": [ + "REGISTERED", + "VERIFYING", + "IN_PROGRESS", + "DONE", + "INSUFFICIENT_BALANCE", + "FAILED" + ], + "description": "- REQUESTED\tpayout requested with all its details\n- VERIFIED\tpayout instruction set details were verified\n- PROCESSING\tpayout instruction set executed and is processing\n- FINALIZED\tpayout done (all payout instructions completed successfully)\n- INSUFFICIENT_BALANCE\tinsufficient balance in the payment account (can be a temporary state)\n- FAILED\tone or more of the payout instructions failed\n" + }, + "PayoutInitMethod": { + "type": "string", + "enum": [ + "FILE", + "API" + ] + }, + "PayoutInstructionResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "payeeAccount": { + "$ref": "#/components/schemas/PayeeAccountResponse" + }, + "amount": { + "$ref": "#/components/schemas/InstructionAmount" + }, + "state": { + "$ref": "#/components/schemas/PayoutInstructionState" + }, + "transactions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Transaction" + } + } + }, + "required": [ + "amount", + "payeeAccount", + "state", + "transactions" + ] + }, + "PayeeAccountResponse": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/PayeeAccountType" + } + } + }, + "PayoutInstructionState": { + "type": "string", + "enum": [ + "NOT_STARTED", + "TRANSACTION_SENT", + "COMPLETED", + "FAILED", + "TRANSLATION_ERROR", + "SKIPPED" + ], + "description": "- NOT_STARTED\t- waiting to start\n- TRANSACTION_SENT - an underlying transaction was sent\n- COMPLETED\t- completed successfully\n- FAILED - failed\n- TRANSLATION_ERROR -lookup of the destination failed (due to changes in the underlying whitelisted external wallet or similar)\n- SKIPPED- no transaction(s) created for this instruction\n" + }, + "Transaction": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "SUBMITTED", + "QUEUED", + "PENDING_AUTHORIZATION", + "PENDING_SIGNATURE", + "BROADCASTING", + "PENDING_3RD_PARTY_MANUAL_APPROVAL", + "PENDING_3RD_PARTY", + "PENDING", + "CONFIRMING", + "CONFIRMED", + "COMPLETED", + "PARTIALLY_COMPLETED", + "PENDING_AML_SCREENING", + "CANCELLING", + "CANCELLED", + "REJECTED", + "BLOCKED", + "FAILED", + "TIMEOUT" + ] + }, + "timestamp": { + "type": "number", + "format": "date-time" + }, + "instructionId": { + "type": "string" + } + }, + "required": [ + "id", + "state" + ] + }, + "DispatchPayoutResponse": { + "type": "object", + "properties": { + "payoutId": { + "type": "string" + } + }, + "required": [ + "payoutId" + ] + }, + "TravelRuleAddress": { + "type": "object", + "properties": { + "street": { + "type": "string", + "example": "1234 Example St", + "description": "Street address" + }, + "city": { + "type": "string", + "example": "New York", + "description": "City" + }, + "state": { + "type": "string", + "example": "NY", + "description": "State or province" + }, + "postalCode": { + "type": "string", + "example": "10001", + "description": "Postal or ZIP code" + } + }, + "required": [ + "street", + "city", + "state", + "postalCode" + ] + }, + "TravelRuleValidateTransactionRequest": { + "type": "object", + "properties": { + "transactionAsset": { + "type": "string", + "example": "BTC", + "description": "Transaction asset symbol BTC,ETH)" + }, + "destination": { + "type": "string", + "example": "bc1qxy2kgdygjrsqtzq2n0yrf1234p83kkfjhx0wlh", + "description": "Transaction destination address" + }, + "transactionAmount": { + "type": "string", + "example": "10", + "description": "Transaction amount in the transaction asset" + }, + "originatorVASPdid": { + "type": "string", + "example": "did:ethr:0x44957e75d6ce4a5bf37aae117da86422c848f7c2", + "description": "This is the identifier assigned to your VASP" + }, + "originatorEqualsBeneficiary": { + "type": "boolean", + "example": false, + "description": "\"True\" if the originator and beneficiary is the same person and you therefore do not need to collect any information. \"False\" if it is a third-party transfer." + }, + "travelRuleBehavior": { + "type": "boolean", + "example": true, + "description": "This will also check if the transaction is a TRAVEL_RULE in the beneficiary VASP's jurisdiction" + }, + "beneficiaryVASPdid": { + "type": "string", + "example": "did:ethr:0x46a7ed5813ce735387df2bfb245bd7722e0de992", + "description": "This is the identifier assigned to the VASP the funds are being sent to" + }, + "beneficiaryVASPname": { + "type": "string", + "example": "HelloCrypto", + "description": "Beneficiary VASP name" + }, + "beneficiaryName": { + "type": "string", + "example": "John Doe", + "description": "Beneficiary name" + }, + "beneficiaryAccountNumber": { + "type": "string", + "example": "1234-1234-1234-12234", + "description": "Beneficiary name" + }, + "beneficiaryAddress": { + "example": "{\"addressLine: [Wayne Manor, Gotham City, New York, USA]\"}", + "description": "Beneficiary name", + "allOf": [ + { + "$ref": "#/components/schemas/TravelRuleAddress" + } + ] + } + }, + "required": [ + "transactionAsset", + "destination", + "transactionAmount", + "originatorVASPdid", + "originatorEqualsBeneficiary", + "travelRuleBehavior", + "beneficiaryVASPdid", + "beneficiaryVASPname", + "beneficiaryName", + "beneficiaryAccountNumber", + "beneficiaryAddress" + ] + }, + "TravelRuleValidateTransactionResponse": { + "type": "object", + "properties": { + "isValid": { + "type": "boolean", + "description": "\"isValid\" will tell you if you have collected all the information needed for the travel rule data transfer. Once this field = \"true\", you can move on to the next step which is to transfer the front-end information to your back-end and perform Travel Rule Transaction create", + "example": true + }, + "type": { + "type": "string", + "description": "\"type\" will tell you if the virtual asset value converted to FIAT value of the withdrawal request is above (=TRAVELRULE) or below (=BELOW_THRESHOLD) the threshold in your jurisdiction. If it is to an unhosted wallet which does not require travel rule information to be sent and only collected, it will say NON_CUSTODIAL.", + "example": "TRAVELRULE" + }, + "beneficiaryAddressType": { + "type": "string", + "description": "\"beneficiaryAddressType\" will tell you if your blockchain analytics provider or internal address book has been able to identify the wallet address.", + "example": "UNKNOWN" + }, + "addressSource": { + "type": "string", + "description": "\"addressSource\" will tell you if the address was found in your internal address book or identified by the blockchain analytics provider.", + "example": "UNKNOWN" + }, + "beneficiaryVASPdid": { + "type": "string", + "description": "The VASP DID of the beneficiary VASP", + "example": "did:ethr:0x46a7ed5813ce735387df2bfb245bd7722e0de992" + }, + "beneficiaryVASPname": { + "type": "string", + "description": "\"beneficiaryVASPname\" will tell you the name of the VASP that has been identified as the owner of the wallet address. This name is used in a subsequent call to get its DID.", + "example": "Fireblocks" + }, + "warnings": { + "description": "\"errors/warnings\" will tell you what information about the beneficiary you need to collect from the sender.", + "example": [ + "optional-beneficiaryAccountNumber" + ], + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "isValid", + "type", + "beneficiaryAddressType", + "addressSource", + "beneficiaryVASPdid", + "beneficiaryVASPname", + "warnings" + ] + }, + "TravelRuleTransactionBlockchainInfo": { + "type": "object", + "properties": { + "txHash": { + "type": "string" + }, + "origin": { + "type": "string" + }, + "destination": { + "type": "string" + } + }, + "required": [ + "txHash", + "origin", + "destination" + ] + }, + "TravelRulePiiIVMS": { + "type": "object", + "properties": { + "fullName": { + "type": "string" + }, + "dateOfBirth": { + "type": "string" + }, + "placeOfBirth": { + "type": "string" + }, + "address": { + "type": "string" + }, + "identificationNumber": { + "type": "string" + }, + "nationality": { + "type": "string" + }, + "countryOfResidence": { + "type": "string" + }, + "taxIdentificationNumber": { + "type": "string" + }, + "customerNumber": { + "type": "string" + } + }, + "required": [ + "fullName", + "dateOfBirth", + "placeOfBirth", + "address", + "identificationNumber", + "nationality", + "countryOfResidence", + "taxIdentificationNumber", + "customerNumber" + ] + }, + "TravelRuleOwnershipProof": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "passport", + "description": "Type of ownership proof" + }, + "id": { + "type": "string", + "example": "123456789", + "description": "Identification number" + }, + "name": { + "type": "string", + "example": "Alice", + "description": "Name of owner" + }, + "country": { + "type": "string", + "example": "US", + "description": "Country of issuance" + }, + "issueDate": { + "type": "string", + "example": "2022-01-01", + "description": "Date of issuance" + }, + "issuer": { + "type": "string", + "example": "US Government", + "description": "Name of issuing entity" + } + }, + "required": [ + "type", + "id", + "name", + "country", + "issueDate", + "issuer" + ] + }, + "TravelRuleValidateFullTransactionRequest": { + "type": "object", + "properties": { + "transactionAsset": { + "type": "string", + "description": "The asset involved in the transaction" + }, + "transactionAmount": { + "type": "string", + "description": "The amount of the transaction" + }, + "originatorDid": { + "type": "string", + "description": "The DID of the transaction originator" + }, + "beneficiaryDid": { + "type": "string", + "description": "The DID of the transaction beneficiary" + }, + "originatorVASPdid": { + "type": "string", + "description": "The VASP ID of the transaction originator" + }, + "beneficiaryVASPdid": { + "type": "string", + "description": "The VASP ID of the transaction beneficiary" + }, + "beneficiaryVASPname": { + "type": "string", + "description": "The name of the VASP acting as the beneficiary" + }, + "transactionBlockchainInfo": { + "description": "Information about the blockchain transaction", + "allOf": [ + { + "$ref": "#/components/schemas/TravelRuleTransactionBlockchainInfo" + } + ] + }, + "originator": { + "description": "Information about the originator of the transaction", + "allOf": [ + { + "$ref": "#/components/schemas/TravelRulePiiIVMS" + } + ] + }, + "beneficiary": { + "description": "Information about the beneficiary of the transaction", + "allOf": [ + { + "$ref": "#/components/schemas/TravelRulePiiIVMS" + } + ] + }, + "encrypted": { + "type": "string", + "description": "Encrypted data related to the transaction" + }, + "protocol": { + "type": "string", + "description": "The protocol used to perform the travel rule" + }, + "notificationEmail": { + "type": "string", + "description": "The email address where a notification should be sent upon completion of the travel rule" + }, + "skipBeneficiaryDataValidation": { + "type": "boolean", + "description": "Whether to skip validation of beneficiary data" + }, + "travelRuleBehavior": { + "type": "boolean", + "description": "Whether to check if the transaction is a TRAVEL_RULE in the beneficiary VASP's jurisdiction" + }, + "originatorProof": { + "description": "Ownership proof related to the originator of the transaction", + "allOf": [ + { + "$ref": "#/components/schemas/TravelRuleOwnershipProof" + } + ] + }, + "beneficiaryProof": { + "description": "Ownership proof related to the beneficiary of the transaction", + "allOf": [ + { + "$ref": "#/components/schemas/TravelRuleOwnershipProof" + } + ] + }, + "pii": { + "description": "Personal identifiable information related to the transaction", + "allOf": [ + { + "$ref": "#/components/schemas/TravelRulePiiIVMS" + } + ] + } + }, + "required": [ + "transactionAsset", + "transactionAmount", + "originatorDid", + "beneficiaryDid", + "originatorVASPdid", + "beneficiaryVASPdid", + "beneficiaryVASPname", + "transactionBlockchainInfo", + "originator", + "beneficiary", + "encrypted", + "protocol", + "notificationEmail", + "skipBeneficiaryDataValidation", + "travelRuleBehavior", + "originatorProof", + "beneficiaryProof", + "pii" + ] + }, + "TravelRuleIssuer": { + "type": "object", + "properties": { + "issuerDid": { + "type": "string" + } + }, + "required": [ + "issuerDid" + ] + }, + "TravelRuleIssuers": { + "type": "object", + "properties": { + "yearFounded": { + "$ref": "#/components/schemas/TravelRuleIssuer" + }, + "isRegulated": { + "$ref": "#/components/schemas/TravelRuleIssuer" + }, + "regulatoryAuthorities": { + "$ref": "#/components/schemas/TravelRuleIssuer" + }, + "name": { + "$ref": "#/components/schemas/TravelRuleIssuer" + }, + "logo": { + "$ref": "#/components/schemas/TravelRuleIssuer" + }, + "website": { + "$ref": "#/components/schemas/TravelRuleIssuer" + }, + "legalName": { + "$ref": "#/components/schemas/TravelRuleIssuer" + }, + "legalStructure": { + "$ref": "#/components/schemas/TravelRuleIssuer" + }, + "incorporationCountry": { + "$ref": "#/components/schemas/TravelRuleIssuer" + }, + "businessNumber": { + "$ref": "#/components/schemas/TravelRuleIssuer" + }, + "addressLine1": { + "$ref": "#/components/schemas/TravelRuleIssuer" + }, + "city": { + "$ref": "#/components/schemas/TravelRuleIssuer" + }, + "country": { + "$ref": "#/components/schemas/TravelRuleIssuer" + }, + "description": { + "$ref": "#/components/schemas/TravelRuleIssuer" + } + }, + "required": [ + "yearFounded", + "isRegulated", + "regulatoryAuthorities", + "name", + "logo", + "website", + "legalName", + "legalStructure", + "incorporationCountry", + "businessNumber", + "addressLine1", + "city", + "country", + "description" + ] + }, + "TravelRuleVASP": { + "type": "object", + "properties": { + "did": { + "type": "string" + }, + "name": { + "type": "string" + }, + "verificationStatus": { + "type": "string" + }, + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "emailDomains": { + "type": "string" + }, + "website": { + "type": "string" + }, + "logo": { + "type": "string" + }, + "legalStructure": { + "type": "string" + }, + "legalName": { + "type": "string" + }, + "yearFounded": { + "type": "string" + }, + "incorporationCountry": { + "type": "string" + }, + "isRegulated": { + "type": "string" + }, + "otherNames": { + "type": "string" + }, + "identificationType": { + "type": "string" + }, + "identificationCountry": { + "type": "string" + }, + "businessNumber": { + "type": "string" + }, + "regulatoryAuthorities": { + "type": "string" + }, + "jurisdictions": { + "type": "string" + }, + "street": { + "type": "string" + }, + "number": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "postCode": { + "type": "string" + }, + "state": { + "type": "string" + }, + "certificates": { + "type": "string" + }, + "description": { + "type": "string" + }, + "travelRule_OPENVASP": { + "type": "string" + }, + "travelRule_SYGNA": { + "type": "string" + }, + "travelRule_TRISA": { + "type": "string" + }, + "travelRule_TRLIGHT": { + "type": "string" + }, + "travelRule_EMAIL": { + "type": "string" + }, + "travelRule_TRP": { + "type": "string" + }, + "travelRule_SHYFT": { + "type": "string" + }, + "travelRule_USTRAVELRULEWG": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "lastSentDate": { + "type": "string" + }, + "lastReceivedDate": { + "type": "string" + }, + "documents": { + "type": "string" + }, + "hasAdmin": { + "type": "boolean" + }, + "isNotifiable": { + "type": "boolean" + }, + "issuers": { + "$ref": "#/components/schemas/TravelRuleIssuers" + } + }, + "required": [ + "did", + "name", + "verificationStatus", + "addressLine1", + "addressLine2", + "city", + "country", + "emailDomains", + "website", + "logo", + "legalStructure", + "legalName", + "yearFounded", + "incorporationCountry", + "isRegulated", + "otherNames", + "identificationType", + "identificationCountry", + "businessNumber", + "regulatoryAuthorities", + "jurisdictions", + "street", + "number", + "unit", + "postCode", + "state", + "certificates", + "description", + "travelRule_OPENVASP", + "travelRule_SYGNA", + "travelRule_TRISA", + "travelRule_TRLIGHT", + "travelRule_EMAIL", + "travelRule_TRP", + "travelRule_SHYFT", + "travelRule_USTRAVELRULEWG", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "lastSentDate", + "lastReceivedDate", + "documents", + "hasAdmin", + "isNotifiable", + "issuers" + ] + }, + "TravelRuleGetAllVASPsResponse": { + "type": "object", + "properties": { + "vasps": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TravelRuleVASP" + } + } + }, + "required": [ + "vasps" + ] + }, + "TravelRuleUpdateVASPDetails": { + "type": "object", + "properties": { + "did": { + "type": "string", + "example": "did:ethr:0x44957e75d6ce4a5bf37aae117da86422c848f7c2", + "description": "The decentralized identifier of the VASP" + }, + "pii_didkey": { + "type": "string", + "example": "did:key:z6Mks5CZRaiooKYhq5TwtXQC1gWhwiZnmiKfFrMnYY62MhYf", + "description": "The PII DID key of the VASP" + } + }, + "required": [ + "did", + "pii_didkey" + ] + }, + "PolicySrcOrDestType": { + "type": "string", + "enum": [ + "EXCHANGE", + "UNMANAGED", + "VAULT", + "NETWORK_CONNECTION", + "COMPOUND", + "FIAT_ACCOUNT", + "ONE_TIME_ADDRESS", + "*" + ], + "description": "* EXCHANGE - A third-party exchange account connected to your workspace\n* UNMANAGED - A unmanaged wallet outside of Fireblocks workspace\n* VAULT - An account in your Fireblocks Vault\n* NETWORK_CONNECTION - A connection in your Fireblocks network\n* COMPOUND - (deprecated) An asset retrieved by using the Compound DeFI protocol\n* FIAT_ACCOUNT - A third-party fiat account connected to your workspace\n* ONE_TIME_ADDRESS - A non-whitelisted asset from your Fireblocks Workspace\n* \"*\" - All types\n" + }, + "PolicySrcOrDestSubType": { + "type": "string", + "enum": [ + "EXTERNAL", + "INTERNAL", + "CONTRACT", + "EXCHANGETEST", + "*" + ], + "description": "* EXTERNAL - A whitelisted wallet assigned as external is typically used for addresses managed by your clients and counterparties\n* INTERNAL - A whitelisted wallet assigned as internal, is typically used for addresses that you control outside of your Fireblocks workspace\n* CONTRACT - A whitelisted wallet assigned as contract is for identifying and managing external smart contracts\n* EXCHANGETEST - Exchanges which operate only on testnet assets\n* \"*\" - All subtypes\n" + }, + "PolicySrcOrDestId": { + "type": "string", + "description": "Defines the account id, options are\n* \"*\" - All accounts\n* Specific account id\n" + }, + "AmountAggregationTimePeriodMethod": { + "type": "string", + "enum": [ + "PER_SINGLE_MATCH", + "ACROSS_ALL_MATCHES" + ], + "description": "* PER_SINGLE_MATCH - Apply the limit to each listed entity\n* ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities\n" + }, + "PolicyRule": { + "type": "object", + "description": "Policy rule which is enforced on transactions", + "properties": { + "operator": { + "type": "string", + "description": "(deprecated - replaced by \"operators\") | Defines users who can initiate the type of transaction to which the rule applies. options are * \"*\" - All users are allowed * Specific User id", + "deprecated": true + }, + "operators": { + "type": "object", + "description": "Defines users/groups who can initiate the type of transaction to which the rule applies.", + "properties": { + "wildcard": { + "type": "string", + "enum": [ + "*" + ], + "description": "If used then this property should appear as the only child property\n* \"*\" - All users are allowed\n" + }, + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + }, + "services": { + "type": "array", + "description": "set of services to initiate transactions", + "items": { + "type": "string" + } + } + } + }, + "transactionType": { + "type": "string", + "enum": [ + "TRANSFER", + "CONTRACT_CALL", + "APPROVE", + "MINT", + "BURN", + "SUPPLY", + "REDEEM", + "STAKE", + "RAW", + "TYPED_MESSAGE" + ], + "description": "Defines the type of transaction to which the rule applies.\n * TRANSFER - Default. Transfers funds from one account to another\n * CONTRACT_CALL - Calls a smart contract, mainly for DeFi operations.\n * APPROVE - Allows a smart contract to withdraw from a designated wallet.\n * MINT - Perform a mint operation (increase supply) on a supported token\n * BURN - Perform a burn operation (reduce supply) on a supported token\n * SUPPLY - Use for DeFi to lend assets\n * REDEEM - Use for DeFi to get lending back\n * STAKE - Allows you to allocate and lock certain assets for earning staking rewards.\n * RAW - An off-chain message with no predefined format, use it to sign any message with your private key.\n * TYPED_MESSAGE - An off-chain message type that follows a predefined format, used to sign specific messages that are not actual transactions.\n" + }, + "designatedSigner": { + "type": "string", + "description": "(deprecated - replaced by \"designatedSigners\") Id representing the user who signs transactions that match a specific rule", + "deprecated": true + }, + "designatedSigners": { + "type": "object", + "description": "Set of ids representing the users who signs transactions that match a specific rule", + "properties": { + "users": { + "type": "array", + "description": "Set of users ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Set of group ids", + "items": { + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "description": "Policy rule type", + "enum": [ + "TRANSFER" + ] + }, + "action": { + "type": "string", + "enum": [ + "ALLOW", + "BLOCK", + "2-TIER" + ], + "description": "Defines what occurs when a transaction meets the rule's criteria\n* ALLOW - The transaction goes through and can be signed without requiring additional approvals\n* BLOCK - The transaction is automatically blocked\n* 2-TIER - Only these users or user groups can approve \n If any of them reject the transaction before the required approval threshold is met, the transaction doesn't go through\n The list of entities are set is \"authorizationGroups\" field\n" + }, + "asset": { + "type": "string", + "description": "Defines the type of asset being transacted, options are\n* \"*\" - All assets\n* Specific asset\n" + }, + "srcType": { + "description": "(deprecated - replaced by \"src\") source account type", + "deprecated": true, + "allOf": [ + { + "$ref": "#/components/schemas/PolicySrcOrDestType" + } + ] + }, + "srcSubType": { + "description": "(deprecated - replaced by \"src\") source sub account type", + "deprecated": true, + "allOf": [ + { + "$ref": "#/components/schemas/PolicySrcOrDestSubType" + } + ] + }, + "srcId": { + "description": "(deprecated - replaced by \"src\") source account id", + "deprecated": true, + "allOf": [ + { + "$ref": "#/components/schemas/PolicySrcOrDestId" + } + ] + }, + "src": { + "type": "object", + "description": "Defines source accounts the rule allows transfers to originate from", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/PolicySrcOrDestId" + }, + { + "$ref": "#/components/schemas/PolicySrcOrDestType" + }, + { + "$ref": "#/components/schemas/PolicySrcOrDestSubType" + } + ] + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstType": { + "description": "(deprecated - replaced by \"dst\") destination account type", + "deprecated": true, + "allOf": [ + { + "$ref": "#/components/schemas/PolicySrcOrDestType" + } + ] + }, + "dstSubType": { + "description": "(deprecated - replaced by \"dst\") destination sub account type", + "deprecated": true, + "allOf": [ + { + "$ref": "#/components/schemas/PolicySrcOrDestSubType" + } + ] + }, + "dstId": { + "description": "(deprecated - replaced by \"dst\") destination account id", + "deprecated": true, + "allOf": [ + { + "$ref": "#/components/schemas/PolicySrcOrDestId" + } + ] + }, + "dst": { + "type": "object", + "description": "Defines the destination accounts the rule allows transfers to", + "properties": { + "ids": { + "type": "array", + "description": "A set of ids", + "items": { + "type": "array", + "description": "A set of ids in a tuple format", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/PolicySrcOrDestId" + }, + { + "$ref": "#/components/schemas/PolicySrcOrDestType" + }, + { + "$ref": "#/components/schemas/PolicySrcOrDestSubType" + } + ] + }, + "minItems": 1, + "maxItems": 3 + } + } + } + }, + "dstAddressType": { + "type": "string", + "enum": [ + "WHITELISTED", + "ONE_TIME", + "*" + ], + "description": "Defines whether the destination to which you are sending funds must be whitelisted, to allow one-time transfers to non-whitelisted external addresses, or both.\nBy default, you can only transfer to an external address after it’s whitelisted.\n * WHITELISTED - Can only be sent to whitelisted addresses.\n * ONE_TIME - Can only be sent to non-whitelisted external addresses.\n * \"*\" - can be sent to whitelisted addresses or non-whitelisted external\n" + }, + "amountCurrency": { + "type": "string", + "enum": [ + "USD", + "EUR", + "NATIVE" + ], + "description": "* USD - Limits the amount of any asset users can transfer based on the USD equivalent of the asset.\n* EUR - Limits the amount of any asset users can transfer based on the EURO equivalent of the asset.\n* NATIVE - Limits the amount of an asset a user can transfer when using a specific asset.\n" + }, + "amountScope": { + "type": "string", + "enum": [ + "SINGLE_TX", + "TIMEFRAME" + ], + "description": "* SINGLE_TX - limit applies to a single transaction\n* TIMEFRAME - limit applies to all transactions within the defined time period\n" + }, + "amount": { + "type": "number", + "description": "Defines the value a transaction must exceed for the rule to apply to it (according to the amountCurrency field)" + }, + "periodSec": { + "type": "number", + "description": "Time period in seconds applied by the amountScope field to accumulate transferred amounts in transactions that match the rule, until the total exceeds the value you specify under Minimum.\nWhen the specified amount is reached within that period, whether by one or many transactions, further transactions in that period either fail or require more approvals.\n" + }, + "authorizers": { + "type": "array", + "description": "(deprecated - replaced by \"authorizationGroups\") Allowed entities which can approves a transaction", + "deprecated": true, + "items": { + "type": "string" + } + }, + "authorizersCount": { + "type": "number", + "description": "(deprecated - replaced by \"authorizationGroups\") Min amount of entities which are needed to approve a transaction", + "deprecated": true + }, + "authorizationGroups": { + "type": "object", + "description": "Defines the transaction approval terms", + "properties": { + "logic": { + "type": "string", + "enum": [ + "AND", + "OR" + ], + "description": "* AND - requires approval of all authorization groups\n* OR - requires approval of at least one of the authorization groups\n" + }, + "allowOperatorAsAuthorizer": { + "type": "boolean", + "description": "Defines whether the user who initiates a transaction can approve their own transaction and count toward the approval threshold for their transaction" + }, + "groups": { + "type": "array", + "description": "Groups of entities which can approve the transaction", + "items": { + "type": "object", + "properties": { + "users": { + "type": "array", + "description": "User ids", + "items": { + "type": "string" + } + }, + "usersGroups": { + "type": "array", + "description": "Group ids", + "items": { + "type": "string" + } + }, + "th": { + "type": "number", + "description": "Represents the min amount of entities which are required to approve the transaction, default is 1." + } + } + } + } + } + }, + "amountAggregation": { + "type": "object", + "description": "Defines the method by which the Policy Engine calculates accumulation.\nIt uses the Initiator, Source, and Destination to calculate accumulation toward the value under Minimum, for the time under Time Period.\n", + "properties": { + "operators": { + "$ref": "#/components/schemas/AmountAggregationTimePeriodMethod" + }, + "srcTransferPeers": { + "$ref": "#/components/schemas/AmountAggregationTimePeriodMethod" + }, + "dstTransferPeers": { + "$ref": "#/components/schemas/AmountAggregationTimePeriodMethod" + } + } + }, + "rawMessageSigning": { + "type": "object", + "description": "Raw message signing configuration", + "properties": { + "algorithm": { + "type": "string" + }, + "derivationPath": { + "type": "object", + "properties": { + "path": { + "type": "array", + "items": { + "type": "number" + } + } + } + } + } + }, + "applyForApprove": { + "type": "boolean", + "description": "Applying this rule over APPROVE type transactions (can only be enabled when rule's transaction type is TRANSFER)" + }, + "applyForTypedMessage": { + "type": "boolean", + "description": "Applying this rule over TYPED_MESSAGE type transactions (can only be enabled when rule's transaction type is CONTRACT_CALL)" + }, + "externalDescriptor": { + "type": "string", + "description": "A unique id identifying the rule" + } + }, + "required": [ + "type", + "action", + "asset", + "amountCurrency", + "amountScope", + "amount", + "periodSec", + "externalDescriptor" + ] + }, + "PublishResult": { + "type": "object", + "description": "Response object of the publish policy operation", + "properties": { + "status": { + "$ref": "#/components/schemas/PolicyStatus" + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PolicyRule" + } + }, + "checkResult": { + "$ref": "#/components/schemas/PolicyCheckResult" + }, + "metadata": { + "$ref": "#/components/schemas/PolicyMetadata" + } + }, + "required": [ + "status", + "rules", + "checkResult", + "metadata" + ] + }, + "PolicyStatus": { + "type": "string", + "enum": [ + "SUCCESS", + "UNVALIDATED", + "INVALID_CONFIGURATION", + "PENDING", + "PENDING_CONSOLE_APPROVAL", + "AWAITING_QUORUM", + "UNHANDLED_ERROR" + ], + "description": "* SUCCESS - success\n* UNVALIDATED - not validated yet\n* INVALID_CONFIGURATION - at least one rule is invalid\n* PENDING - pending approval\n* PENDING_CONSOLE_APPROVAL - pending approval from the console app\n* AWAITING_QUORUM - pending quorum approval\n* UNHANDLED_ERROR - unhandled error\n" + }, + "PolicyMetadata": { + "type": "object", + "description": "Policy related metadata", + "properties": { + "editedBy": { + "type": "string", + "description": "The user id of the user who last edited the policy" + }, + "editedAt": { + "type": "string", + "description": "The timestamp of the last edit of the policy" + }, + "publishedBy": { + "type": "string", + "description": "The user id of the user who last published the policy" + }, + "publishedAt": { + "type": "string", + "description": "The timestamp of the last publish of the policy" + } + } + }, + "PolicyCheckResult": { + "type": "object", + "description": "Policy rules validation result", + "properties": { + "errors": { + "type": "number", + "description": "Number of errors" + }, + "result": { + "type": "array", + "description": "A set of validation results", + "items": { + "$ref": "#/components/schemas/PolicyRuleCheckResult" + } + } + }, + "required": [ + "errors", + "result" + ] + }, + "PolicyRuleCheckResult": { + "type": "object", + "description": "The rule validation result", + "properties": { + "index": { + "type": "number", + "description": "Rule index number in the policy" + }, + "status": { + "type": "string", + "description": "Validation status", + "enum": [ + "ok", + "failure" + ] + }, + "errors": { + "type": "array", + "description": "A set of rule validation error objects", + "items": { + "$ref": "#/components/schemas/PolicyRuleError" + } + } + }, + "required": [ + "index", + "status", + "errors" + ] + }, + "PolicyRuleError": { + "type": "object", + "description": "Rule validation result error", + "properties": { + "errorMessage": { + "type": "string", + "description": "Error message" + }, + "errorCode": { + "type": "number", + "description": "error code" + }, + "errorCodeName": { + "type": "string", + "description": "error code name" + }, + "errorField": { + "type": "string", + "enum": [ + "operator", + "operators", + "authorizationGroups", + "designatedSigner", + "designatedSigners", + "contractMethods", + "amountAggregation", + "src", + "dst" + ], + "description": "The field which the error relates to\n* operator - transaction initiator\n* operators - transaction initiators\n* authorizationGroups - transaction authorizer groups\n* designatedSigner - transaction signer\n* designatedSigners - transaction signers\n* contractMethods - contract methods\n* amountAggregation - transaction amount aggregation configuration\n* src - transaction source asset configuration\n* dst - transaction destination asset configuration\n" + } + }, + "required": [ + "errorMessage", + "errorCode", + "errorCodeName", + "errorField" + ] + }, + "DraftReviewAndValidationResponse": { + "type": "object", + "description": "Draft validation", + "properties": { + "draftResponse": { + "$ref": "#/components/schemas/DraftResponse" + }, + "validation": { + "$ref": "#/components/schemas/PolicyValidation" + } + }, + "required": [ + "draftResponse", + "validation" + ] + }, + "PolicyAndValidationResponse": { + "type": "object", + "description": "Policy validation", + "properties": { + "policy": { + "$ref": "#/components/schemas/PolicyResponse" + }, + "validation": { + "$ref": "#/components/schemas/PolicyValidation" + } + }, + "required": [ + "policy", + "validation" + ] + }, + "DraftResponse": { + "type": "object", + "description": "Response object for draft operations", + "properties": { + "status": { + "type": "string", + "description": "Operation status" + }, + "rules": { + "type": "array", + "description": "Draft rules", + "items": { + "$ref": "#/components/schemas/PolicyRule" + } + }, + "draftId": { + "type": "string", + "description": "Draft unique id" + }, + "metadata": { + "$ref": "#/components/schemas/PolicyMetadata" + } + }, + "required": [ + "draftId", + "status", + "rules", + "metadata" + ] + }, + "PolicyResponse": { + "type": "object", + "description": "Response object for policy operations", + "properties": { + "rules": { + "type": "array", + "description": "A set of policy rules", + "items": { + "$ref": "#/components/schemas/PolicyRule" + } + }, + "metadata": { + "$ref": "#/components/schemas/PolicyMetadata" + } + }, + "required": [ + "rules", + "metadata" + ] + }, + "PolicyValidation": { + "type": "object", + "description": "Policy validation object", + "properties": { + "status": { + "type": "string", + "description": "Validation status" + }, + "checkResult": { + "$ref": "#/components/schemas/PolicyCheckResult" + } + }, + "required": [ + "status", + "checkResult" + ] + }, + "ErrorResponse": { + "type": "object", + "properties": { + "error": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "INTERNAL", + "AUTHENTICATION", + "AUTHORIZATION", + "VALIDATION", + "NOT_FOUND", + "UNPROCESSABLE_ENTITY", + "FORBIDDEN" + ] + }, + "message": { + "type": "string" + } + }, + "required": [ + "type", + "message" + ] + } + }, + "required": [ + "error" + ] + } + } + } +} \ No newline at end of file diff --git a/examples/swagger/iamport.json b/examples/swagger/iamport.json new file mode 100644 index 0000000..d4459b7 --- /dev/null +++ b/examples/swagger/iamport.json @@ -0,0 +1,4535 @@ +{ + "openapi": "3.0.1", + "servers": [ + { + "url": "http://localhost:10851", + "description": "fake" + }, + { + "url": "https://api.iamport.kr", + "description": "real" + } + ], + "info": { + "title": "Iamport API", + "description": "Built by [fake-iamport-server](https://github.com/samchon/fake-iamport-server) with [nestia](https://github.com/samchon/nestia)", + "version": "2.0.1", + "license": { + "name": "MIT" + } + }, + "paths": { + "/certifications/{imp_uid}": { + "get": { + "tags": [], + "parameters": [ + { + "name": "imp_uid", + "in": "path", + "schema": { + "type": "string" + }, + "description": "대상 본인인증 정보의 ", + "required": true + } + ], + "responses": { + "200": { + "description": "본인인증 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportCertification_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "본인인증 정보 열람하기", + "description": "본인인증 정보 열람하기.\n\n`certiciations.at` 은 본인인증 정보를 열람할 때 사용하는 API 함수이다.\n\n다만 이 API 함수를 통하여 열람한 본인인증 정보 {@link IIamportCertification } 이\n곧 OTP 인증까지 마쳐 본인인증을 모두 마친 레코드라는 보장은 없다. 본인인증의 완결\n여부는 오직, {@link IIamportCertification.certified } 값을 직접 검사해봐야만 알\n수 있기 때문이다.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "certifications.at", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "imp_uid", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "대상 본인인증 정보의 ", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "IIamportCertification.imp_uid", + "kind": "linkName", + "target": { + "fileName": "C:/github/samchon/fake-iamport-server/src/api/structures/IIamportCertification.ts", + "textSpan": { + "start": 488, + "length": 16 + } + } + }, + { + "text": "}", + "kind": "link" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "본인인증 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "GET" + }, + "delete": { + "tags": [], + "parameters": [ + { + "name": "imp_uid", + "in": "path", + "schema": { + "type": "string" + }, + "description": "대상 본인인증 정보의 ", + "required": true + } + ], + "responses": { + "200": { + "description": "삭제된 본인인증 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportCertification_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "본인인증 정보 삭제하기", + "description": "본인인증 정보 삭제하기.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "certifications.erase", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "imp_uid", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "대상 본인인증 정보의 ", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "IIamportCertification.imp_uid", + "kind": "linkName", + "target": { + "fileName": "C:/github/samchon/fake-iamport-server/src/api/structures/IIamportCertification.ts", + "textSpan": { + "start": 488, + "length": 16 + } + } + }, + { + "text": "}", + "kind": "link" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "삭제된 본인인증 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "DELETE" + } + }, + "/certifications/otp/request": { + "post": { + "tags": [], + "parameters": [], + "requestBody": { + "description": "본인인증 요청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportCertification.IStore" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "진행 중인 본인인증의 식별자 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportCertification.IAccessor_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "본인인증 요청하기", + "description": "본인인증 요청하기.\n\n`certifications.otp.request` 는 아임포트 서버에 본인인증을 요청하는 API 함수이다.\n이 API 를 호출하면 본인인증 대상자의 핸드폰으로 OTP 문자가 전송되며, 본인인증\n대상자가 {@link certifications.otp.confirm } 을 통하여 이 OTP 번호를 정확히\n입력함으로써, 본인인증이 완결된다.\n\n또한 본인인증 대상자가 자신의 핸드폰으로 전송된 OTP 문자를 입력하기 전에도,\n여전히해당 본인인증 내역은 {@link certifications.at } 함수를 통하여 조회할 수 있다.\n다만, 이 때 리턴되는 {@link IIamportCertification } 에서 인증의 완결 여부를\n지칭하는 {@link IIamportCertification.certified } 값은 `false` 이다.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "certifications.otp.request.request", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "본인인증 요청 정보", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "진행 중인 본인인증의 식별자 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + }, + "/certifications/otp/confirm/{imp_uid}": { + "post": { + "tags": [], + "parameters": [ + { + "name": "imp_uid", + "in": "path", + "schema": { + "type": "string" + }, + "description": "대상 본인인증 정보의 ", + "required": true + } + ], + "requestBody": { + "description": "OTP 코드", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportCertification.IConfirm" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "인증 완료된 본인인증 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportCertification_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "본인인증 시 발급된 OTP 코드 입력하기", + "description": "본인인증 시 발급된 OTP 코드 입력하기.\n\n`certifications.otp.confirm` 는 {@link certifications.otp.request } 를 통하여\n발급된 본인인증 건에 대하여, 본인인증 대상자의 휴대폰으로 전송된 OTP 번호를\n검증하고, 입력한 OTP 번호가 맞거든 해당 본인인증 건을 승인하여 완료 처리해주는\nAPI 함수이다.\n\n이처럼 본인인증을 완료하거든, 해당 본인인증 건 {@link IIamportCertification } 의\n{@link IIamportCertification.certified } 값이 비로소 `true` 로 변경되어,\n비로소 완결된다.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "certifications.otp.confirm.confirm", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "imp_uid", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "대상 본인인증 정보의 ", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "IIamportCertification.imp_uid", + "kind": "linkName", + "target": { + "fileName": "C:/github/samchon/fake-iamport-server/src/api/structures/IIamportCertification.ts", + "textSpan": { + "start": 488, + "length": 16 + } + } + }, + { + "text": "}", + "kind": "link" + } + ] + }, + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "OTP 코드", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "인증 완료된 본인인증 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + }, + "/internal/webhook": { + "post": { + "tags": [], + "parameters": [], + "requestBody": { + "description": "웹훅 이벤트 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportPayment.IWebhook" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "", + "x-nestia-encrypted": false + } + }, + "summary": "웹훅 이벤트 더미 리스너", + "description": "웹훅 이벤트 더미 리스너.\n\n`internal.webhook` 은 실제 아임포트의 서버에는 존재하지 않는 API 로써,\n`fake-impoart-server` 의 {@link Configuration.WEBHOOK_URL } 에 아무런 URL 을 설정하지\n않으면, `fake-iamport-server` 로부터 발생하는 모든 종류의 웹훅 이벤트는 이 곳으로 전달되어\n무의미하게 사라진다.\n\n따라서 `fake-iamport-server` 를 사용하여 아임포트 서버와의 연동을 미리 검증코자 할 때는,\n반드시 {@link Configuration.WEBHOOK_URL } 를 설정하여 웹훅 이벤트가 귀하의 백엔드 서버로\n제대로 전달되도록 하자.", + "x-nestia-namespace": "internal.webhook.webhook", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "웹훅 이벤트 정보", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + }, + "/internal/deposit/{imp_uid}": { + "get": { + "tags": [], + "parameters": [ + { + "name": "imp_uid", + "in": "path", + "schema": { + "type": "string" + }, + "description": "대상 결제의 ", + "required": true + } + ], + "responses": { + "200": { + "description": "", + "x-nestia-encrypted": false + } + }, + "summary": "가상 계좌에 입금하기", + "description": "가상 계좌에 입금하기.\n\n`internal.deposit` 은 실제 아임포트 결제 서버에는 존재하지 않는 API 로써, 가상 계좌\n결제를 신청한 고객이, 이후 가상 계좌에 목표 금액을 입금하는 상황을 시뮬레이션 할 수 있는\n함수이다.\n\n즉, `internal.deposit` 는 고객이 스스로에게 가상으로 발급된 계좌에 입금을 하고, 그에 따라\n아임포트 서버에서 webhook 이벤트가 발생, 이를 귀하의 백엔드 서버로 전송하는 일련의 상황을\n시뮬레이션하기 위하여 설계된 테스트 함수다.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "internal.deposit.deposit", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "imp_uid", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "대상 결제의 ", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "IIamportVBankPayment.imp_uid ", + "kind": "linkText" + }, + { + "text": "}", + "kind": "link" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "GET" + } + }, + "/payments/{imp_uid}": { + "get": { + "tags": [], + "parameters": [ + { + "name": "imp_uid", + "in": "path", + "schema": { + "type": "string" + }, + "description": "대상 결제 기록의 ", + "required": true + }, + { + "name": "query", + "in": "query", + "schema": { + "$ref": "#/components/schemas/IIamportPayment.IQuery" + }, + "description": "결제 수단이 페이팔인 경우에 사용", + "required": true + } + ], + "responses": { + "200": { + "description": "결제 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportPayment_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "결제 기록 열람하기", + "description": "결제 기록 열람하기.\n\n아임포트를 통하여 발생한 결제 기록을 열람한다.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "payments.at", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "imp_uid", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "대상 결제 기록의 ", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "IIamportPayment.imp_uid", + "kind": "linkName", + "target": { + "fileName": "C:/github/samchon/fake-iamport-server/src/api/structures/IIamportPayment.ts", + "textSpan": { + "start": 2339, + "length": 16 + } + } + }, + { + "text": "}", + "kind": "link" + } + ] + }, + { + "name": "param", + "text": [ + { + "text": "query", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "결제 수단이 페이팔인 경우에 사용", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "결제 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "GET" + } + }, + "/payments/cancel": { + "post": { + "tags": [], + "parameters": [], + "requestBody": { + "description": "결제 취소 입력 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportPaymentCancel.IStore" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "취소된 결제 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportPayment_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "결제 취소하기", + "description": "결제 취소하기.\n\n만약 가상 계좌를 통한 결제였다면, 반드시 환불 계좌 정보를 입력해줘야 한다.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "payments.cancel.cancel", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "결제 취소 입력 정보", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "취소된 결제 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + }, + "/receipts/{imp_uid}": { + "get": { + "tags": [], + "parameters": [ + { + "name": "imp_uid", + "in": "path", + "schema": { + "type": "string" + }, + "description": "귀속 결제의 ", + "required": true + } + ], + "responses": { + "200": { + "description": "현금 영수증 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportReceipt_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "현금 영수증 조회하기", + "description": "현금 영수증 조회하기.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "receipts.at", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "imp_uid", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "귀속 결제의 ", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "IIamportPayment.imp_uid", + "kind": "linkName", + "target": { + "fileName": "C:/github/samchon/fake-iamport-server/src/api/structures/IIamportPayment.ts", + "textSpan": { + "start": 2339, + "length": 16 + } + } + }, + { + "text": "}", + "kind": "link" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "현금 영수증 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "GET" + }, + "post": { + "tags": [], + "parameters": [ + { + "name": "imp_uid", + "in": "path", + "schema": { + "type": "string" + }, + "description": "귀속 결제의 ", + "required": true + } + ], + "requestBody": { + "description": "현금 영수증 입력 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportReceipt.IStore" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "현금 영수증 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportReceipt_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "현금 영수증 발행하기", + "description": "현금 영수증 발행하기.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "receipts.store", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "imp_uid", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "귀속 결제의 ", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "IIamportPayment.imp_uid", + "kind": "linkName", + "target": { + "fileName": "C:/github/samchon/fake-iamport-server/src/api/structures/IIamportPayment.ts", + "textSpan": { + "start": 2339, + "length": 16 + } + } + }, + { + "text": "}", + "kind": "link" + } + ] + }, + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "현금 영수증 입력 정보", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "현금 영수증 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + }, + "delete": { + "tags": [], + "parameters": [ + { + "name": "imp_uid", + "in": "path", + "schema": { + "type": "string" + }, + "description": "귀속 결제의 ", + "required": true + } + ], + "responses": { + "200": { + "description": "취소된 현금 영수증 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportReceipt_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "현금 영수증 취소하기", + "description": "현금 영수증 취소하기.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "receipts.erase", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "imp_uid", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "귀속 결제의 ", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "IIamportPayment.imp_uid", + "kind": "linkName", + "target": { + "fileName": "C:/github/samchon/fake-iamport-server/src/api/structures/IIamportPayment.ts", + "textSpan": { + "start": 2339, + "length": 16 + } + } + }, + { + "text": "}", + "kind": "link" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "취소된 현금 영수증 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "DELETE" + } + }, + "/users/getToken": { + "post": { + "tags": [], + "parameters": [], + "requestBody": { + "description": "아임포트의 API 및 secret 키 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportUser.IAccessor" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "유저 인증 토큰 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportUser_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "유저 인증 토큰 발행하기", + "description": "유저 인증 토큰 발행하기.\n\n아임포트에 가입하여 부여받은 API 및 secret 키를 토대로, 유저 인증 토큰을 발행한다.\n\n단, 아임포트가 발급해주는 유저 인증 토큰에는 유효 시간 {@link IIamportUser.expired_at }\n이 있어, 해당 시간이 지나거든 기 발급 토큰이 만료되어 더 이상 쓸 수 없게 된다. 때문에\n아임포트의 이러한 시간 제한에 구애받지 않고 자유로이 아임포트의 API 를 이용하고 싶다면,\n`iamport-server-api` 에서 제공해주는 {@link IamportConnector } 를 활용하도록 하자.", + "x-nestia-namespace": "users.getToken.getToken", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "아임포트의 API 및 secret 키 정보", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "유저 인증 토큰 정보", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + }, + "/vbanks": { + "post": { + "tags": [], + "parameters": [], + "requestBody": { + "description": "가상 계좌 입력 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportVBankPayment.IStore" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "가상 계좌 결제 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportVBankPayment_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "가상 계좌 발급하기", + "description": "가상 계좌 발급하기.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "vbanks.store", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "가상 계좌 입력 정보", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "가상 계좌 결제 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + }, + "put": { + "tags": [], + "parameters": [], + "requestBody": { + "description": "가상 계좌 편집 입력 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportVBankPayment.IUpdate" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "편집된 가상 계좌 결제 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportVBankPayment_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "가상 계좌 편집하기", + "description": "가상 계좌 편집하기.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "vbanks.update", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "가상 계좌 편집 입력 정보", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "편집된 가상 계좌 결제 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "PUT" + } + }, + "/subscribe/customers/{customer_uid}": { + "get": { + "tags": [], + "parameters": [ + { + "name": "customer_uid", + "in": "path", + "schema": { + "type": "string" + }, + "description": "고객 (간편 결제 카드) 식별자 키", + "required": true + } + ], + "responses": { + "200": { + "description": "간편 결제 카드 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportSubscription_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "간편 결제 카드 정보 조회하기", + "description": "간편 결제 카드 정보 조회하기.\n\n`subscribe.customers.at` 은 고객이 {@link store } 나 혹은 아임포트가 제공하는\n간편 결제 카드 등록 창을 이용하여 저장한 간편 결제 카드 정보를 조회하는 API\n함수이다.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "subscribe.customers.at", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "customer_uid", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "고객 (간편 결제 카드) 식별자 키", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "간편 결제 카드 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "GET" + }, + "post": { + "tags": [], + "parameters": [ + { + "name": "customer_uid", + "in": "path", + "schema": { + "type": "string" + }, + "description": "고객 (간편 결제 카드) 식별자 키", + "required": true + } + ], + "requestBody": { + "description": "카드 입력 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportSubscription.IStore" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "간편 결제 카드 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportSubscription_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "간편 결제 카드 등록하기", + "description": "간편 결제 카드 등록하기.\n\n`subscribe.customers.stoer` 는 고객이 자신의 카드를 서버에 등록해두고, 매번 결제가\n필요할 때마다 카드 정보를 반복 입력하는 일 없이, 간편하게 결제를 진행하고자 할 때\n사용하는 API 함수이다.\n\n참고로 `subscribe.customers.store` 는 클라이언트 어플리케이션이 아임포트가 제공하는\n간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는\n일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는 상황을 시뮬레이션하기 위하여,\n테스트 자동화 프로그램 수준에서 사용될 수는 있다.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "subscribe.customers.store", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "customer_uid", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "고객 (간편 결제 카드) 식별자 키", + "kind": "text" + } + ] + }, + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "카드 입력 정보", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "간편 결제 카드 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + }, + "delete": { + "tags": [], + "parameters": [ + { + "name": "customer_uid", + "in": "path", + "schema": { + "type": "string" + }, + "description": "고객 (간편 결제 카드) 식별자 키", + "required": true + } + ], + "responses": { + "200": { + "description": "삭제된 간편 결제 카드 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportSubscription_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "간편 결제 카드 삭제하기", + "description": "간편 결제 카드 삭제하기.\n\n간편 결제를 위하여 등록한 카드를 제거한다.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "subscribe.customers.erase", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "customer_uid", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "고객 (간편 결제 카드) 식별자 키", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "삭제된 간편 결제 카드 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "DELETE" + } + }, + "/subscribe/payments/onetime": { + "post": { + "tags": [], + "parameters": [], + "requestBody": { + "description": "카드 결제 신청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportSubscription.IOnetime" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "카드 결제 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportCardPayment_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "카드로 결제하기, 더불어 간편 결제용으로 등록 가능", + "description": "카드로 결제하기, 더불어 간편 결제용으로 등록 가능.\n\n`subscribe.payments.onetime` 은 카드를 매개로 한 결제를 하고자 할 때 호출하는 API\n함수이다. 더하여 입력 값에 {@link IIamportSubscription.IOnetime.customer_uid } 를\n기입하는 경우, 결제에 사용한 카드를 그대로 간편 결제용 카드\n{@link IIamportSubscription } 로 등록해버린다.\n\n다만, 정히 간편 카드 등록과 결제를 동시에 하고 싶다면,\n`subscribe.payments.onetime` 에 {@link IIamportSubscription.IOnetime.customer_uid }\n를 더하기보다, {@link subscribe.customers.store } 와 {@link subscribe.payments.again }\n을 각각 호출하는 것을 권장한다. 그것이 예외적인 상황에 보다 안전하게 대처할 수 있기\n때문이다.\n\n더하여 `subscribe.payments.onetime` 은 클라이언트 어플리케이션이 아임포트가 제공하는\n결제 창을 그대로 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는 일은\n없을 것이다. 다만, 고객이 카드를 통하여 결제하는 상황을 시뮬레이션하기 위하여, 테스트\n자동화 프로그램 수준에서 사용될 수는 있다.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "subscribe.payments.onetime.onetime", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "카드 결제 신청 정보", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "카드 결제 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + }, + "/subscribe/payments/again": { + "post": { + "tags": [], + "parameters": [], + "requestBody": { + "description": "미리 등록한 카드를 이용한 결제 신청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportSubscription.IAgain" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "카드 결제 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IIamportResponse_lt_IIamportCardPayment_gt_" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "간편 결제에 등록된 카드로 결제하기", + "description": "간편 결제에 등록된 카드로 결제하기.\n\n`subscribe.payments.again` 은 고객이 간편 결제에 등록한 카드로 결제를 진행하고자 할 때\n호출하는 API 함수이다. 이는 간편하고 불편하고를 떠나, 본질적으로 카드 결제의 일환이기에,\n리턴값은 일반적인 카드 결제 때와 동일한 {@link IIamportCardPayment } 이다.\n\n그리고 `subscribe.payments.again` 은 결제 수단 중 유일하게, 클라이언트 어플리케이션이\n아임포트가 제공하는 결체 창을 사용할 수 없어, 오직 귀하의 백엔드 서버가 아임포트의 API\n함수를 직접 호출해야하는 경우에 해당한다. 따라서 간편 결제에 관하여 아임포트 서버와\n연동하는 백엔드 서버 및 프론트 어플리케이션을 개발할 때, 반드시 이 상황에 대한 별도의\n설계 및 개발이 필요하니, 이 점을 염두에 두기 바란다.", + "security": [ + { + "bearer": [] + } + ], + "x-nestia-namespace": "subscribe.payments.again.again", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "미리 등록한 카드를 이용한 결제 신청 정보", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "카드 결제 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "bearer", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + } + }, + "components": { + "schemas": { + "IIamportResponse_lt_IIamportCertification_gt_": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "$ref": "#/components/schemas/IIamportCertification" + } + }, + "nullable": false, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportCertification": { + "type": "object", + "properties": { + "imp_uid": { + "description": "아임포트가 발급해 준 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "서비스로부터의 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "name": { + "description": "본인인증대상자 성명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "gender": { + "description": "성별.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "birth": { + "description": "생년월일.\n\n리눅스 타임이 쓰인다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "birthday": { + "description": "생년월일, YYYYMMDD 형식.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "foreigner": { + "description": "외국인 여부.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "phone": { + "description": "본인인증 대상자 핸드폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "carrier": { + "description": "본인인증 대상자 통신사 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "SKT", + "KT", + "LGT" + ] + }, + "certified": { + "description": "OTP 인증 여부.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "certified_at": { + "description": "OTP 인증 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "unique_key": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "unique_in_site": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "description": "PG 제공자.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "origin": { + "description": "뭔지 잘 모름, 용도 아시는 분?", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "__otp": { + "description": "(테스트 전용) OTP 코드.\n\n오직 `fake-iamport-server` 에서만 쓰이는 속성으로써, 본인인증을 시뮬레이션할 때,\n어떠한 OTP 코드가 발급되었는 지를 확인하기 위하여 사용된다. 이를 이용하여\n{@link functional.certifications.otp.confirm } 함수를 호출하면, 본인인증을 완료할\n수 있다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "nullable": false, + "required": [ + "imp_uid", + "merchant_uid", + "name", + "gender", + "birth", + "birthday", + "foreigner", + "phone", + "carrier", + "certified", + "certified_at", + "unique_key", + "unique_in_site", + "pg_tid", + "pg_provider", + "origin" + ], + "description": "본인 인증 내역.\n\n`IIamportCertification` 은 아임포트의 본인인증 정보를 형상화한 자료구조 인터페이스이다.\n\n단, `IIamportCertification` 레코드의 존재가 곧 본인인증의 완결을 뜻하는 것은 아니다.\n{@link IIamportCertification.certified } 값이 `true` 여야만이 비로소, 본인인증\n대상자가 자신의 핸드폰 번호로 전송된 OTP 를 아임포트의 본인인증 팝업창에 정확히 적어,\n본인인증을 완료했음을 의미한다.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportCertification.IStore": { + "type": "object", + "properties": { + "name": { + "description": "본인인증대상자 성명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "phone": { + "description": "본인인증 대상자 핸드폰 번호.\n\n핸드폰 번호에 \"-\" 값이 들어가던 아니던 상관 없음.\n\n다만, 내부적으로는 \"-\" 값을 제거하여 처리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "birth": { + "description": "생년월일.\n\nYYYYMMDD 형식.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "gender_digit": { + "description": "주민등록 뒷부분 첫 자리.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "carrier": { + "description": "본인인증 대상자 통신사 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "SKT", + "KT", + "LGT" + ] + }, + "is_mvno": { + "description": "알뜰폰 여부.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "boolean" + }, + "commpany": { + "description": "가맹점 서비스 명칭 또는 domain URL.\n\nKISA 에서 대상자에게 발송하는 SMS에 안내될 서비스 명칭.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "merchant_uid": { + "description": "귀사 서비스에서의 본인인증 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "pg": { + "description": "PG 사 구분자.\n\n다날 상점아이디를 2개 이상 동시에 사용하시려는 경우에 설정하면 된다.\n\n**danal.{상점아이디}** 형태로 지정.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "nullable": false, + "required": [ + "name", + "phone", + "birth", + "gender_digit", + "carrier" + ], + "description": "본인 인증 입력 정보.", + "x-typia-jsDocTags": [] + }, + "IIamportResponse_lt_IIamportCertification.IAccessor_gt_": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "$ref": "#/components/schemas/IIamportCertification.IAccessor" + } + }, + "nullable": false, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportCertification.IAccessor": { + "type": "object", + "properties": { + "imp_uid": { + "description": "본인인증정보의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": false, + "required": [ + "imp_uid" + ], + "description": "본인인증 정보의 접근자 구조체.", + "x-typia-jsDocTags": [] + }, + "IIamportCertification.IConfirm": { + "type": "object", + "properties": { + "otp": { + "description": "SMS 로 전송된 본인인증 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": false, + "required": [ + "otp" + ], + "description": "본인인증 승인을 위한 입력 정보.", + "x-typia-jsDocTags": [] + }, + "IIamportPayment.IWebhook": { + "type": "object", + "properties": { + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "status": { + "description": "현재 상태.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + } + }, + "nullable": false, + "required": [ + "imp_uid", + "merchant_uid", + "status" + ], + "description": "웹훅 데이터.", + "x-typia-jsDocTags": [] + }, + "IIamportPayment.IQuery": { + "type": "object", + "properties": { + "extension": { + "description": "페이팔의 경우, 이 값을 `true` 로 할 것.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "boolean" + } + }, + "nullable": false, + "description": "결제 수단이 페이팔인 경우, 페이팔의 구매자 보호정책에 의해 결제 승인 시점에\nPending 상태를 만든 후, 내부 심사등을 통해 최종 결제 완료라고 변경함.\n\n`iamport` 의 기술적 이슈로 해당 상태를 status: failed 로 기록함. 추후\n페이팔에서 최종결제완료로 변경된 경우, `iamport` 에서 `paid` 로 변경 후,\n해당건에 대한 웹훅 발송. `iamport` 를 사용하는 고객사에서는, failed 로 이미\n처리된 결제건에 대한 paid 상태의 웹훅을 받는 문제점이 생김.\n\n이에, `iamport` 에서 제공하는 `/payment/{imp_uid}` 에 query-string 으로\n`extension=true` 옵션을 추가해야 함", + "x-typia-jsDocTags": [ + { + "name": "issue", + "text": [ + { + "text": "https://github.com/samchon/fake-iamport-server/issues/13", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Sangjin Han - https://github.com/ltnscp9028", + "kind": "text" + } + ] + } + ] + }, + "IIamportResponse_lt_IIamportPayment_gt_": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "$ref": "#/components/schemas/IIamportPayment" + } + }, + "nullable": false, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportPayment": { + "oneOf": [ + { + "$ref": "#/components/schemas/IIamportCardPayment" + }, + { + "$ref": "#/components/schemas/IIamportTransferPayment" + }, + { + "$ref": "#/components/schemas/IIamportVBankPayment" + }, + { + "$ref": "#/components/schemas/IIamportPayment.IBase_lt__doublequote_phone_doublequote__space__or__space__doublequote_kpay_doublequote__space__or__space__doublequote_kakaopay_doublequote__space__or__space__doublequote_payco_doublequote__space__or__space__doublequote_lpay_doublequote__space__or__space__doublequote_ssgpay_doublequote__space__or__space__doublequote_tosspay_doublequote__space__or__space__doublequote_cultureland_doublequote__space__or__space__doublequote_smartculture_doublequote__space__or__space__doublequote_happymoney_doublequote__space__or__space__doublequote_booknlife_doublequote__space__or__space__doublequote_point_doublequote__gt_" + } + ], + "description": "결제 정보.\n\n`IIamportPayment` 는 아임포트의 결제 정보를 형상화한 자료구조이자 유니언 타입의\n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.pay_method === \"card\")\n payment.card_number; // payment be IIamportCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportCardPayment": { + "type": "object", + "properties": { + "card_code": { + "description": "카드 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "description": "카드 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}" + }, + "card_quota": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "integer" + }, + "apply_num": { + "description": "카드사 승인번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pay_method": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "card", + "samsung" + ] + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "$ref": "#/components/schemas/IIamportPayment.Currency" + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/IIamportPayment.Status" + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/IIamportPaymentCancel" + } + } + }, + "nullable": false, + "required": [ + "card_code", + "card_name", + "card_number", + "card_quota", + "apply_num", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportPayment.Currency": { + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "IIamportPayment.Status": { + "type": "string", + "enum": [ + "paid", + "ready", + "failed", + "cancelled" + ] + }, + "IIamportPaymentCancel": { + "type": "object", + "properties": { + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_url": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "nullable": false, + "required": [ + "pg_id", + "pg_tid", + "amount", + "cancelled_at", + "reason", + "receipt_url" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportTransferPayment": { + "type": "object", + "properties": { + "bank_code": { + "description": "은행 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "bank_name": { + "description": "은행 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pay_method": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "trans" + ] + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "$ref": "#/components/schemas/IIamportPayment.Currency" + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/IIamportPayment.Status" + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/IIamportPaymentCancel" + } + } + }, + "nullable": false, + "required": [ + "bank_code", + "bank_name", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportVBankPayment": { + "type": "object", + "properties": { + "vbank_code": { + "description": "가상 계좌 식별자 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_name": { + "description": "가상 게좌 이름", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_num": { + "description": "가상 계좌 번호", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_holder": { + "description": "가상 계좌 예금주.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_date": { + "description": "가상 계좌 입금 만료 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vbank_issued_at": { + "description": "가상 계좌 개설 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "pay_method": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "vbank" + ] + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "$ref": "#/components/schemas/IIamportPayment.Currency" + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/IIamportPayment.Status" + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/IIamportPaymentCancel" + } + } + }, + "nullable": false, + "required": [ + "vbank_code", + "vbank_name", + "vbank_num", + "vbank_holder", + "vbank_date", + "vbank_issued_at", + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportPayment.IBase_lt__doublequote_phone_doublequote__space__or__space__doublequote_kpay_doublequote__space__or__space__doublequote_kakaopay_doublequote__space__or__space__doublequote_payco_doublequote__space__or__space__doublequote_lpay_doublequote__space__or__space__doublequote_ssgpay_doublequote__space__or__space__doublequote_tosspay_doublequote__space__or__space__doublequote_cultureland_doublequote__space__or__space__doublequote_smartculture_doublequote__space__or__space__doublequote_happymoney_doublequote__space__or__space__doublequote_booknlife_doublequote__space__or__space__doublequote_point_doublequote__gt_": { + "type": "object", + "properties": { + "pay_method": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "phone", + "kpay", + "kakaopay", + "payco", + "lpay", + "ssgpay", + "tosspay", + "cultureland", + "smartculture", + "happymoney", + "booknlife", + "point" + ] + }, + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "description": "주문명, 누락 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancel_amount": { + "description": "결제 취소, 환불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "currency": { + "$ref": "#/components/schemas/IIamportPayment.Currency" + }, + "receipt_url": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "cash_receipt_issue": { + "description": "현금 영수증 발행 여부.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "channel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "emb_pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_tid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "escrow": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "buyer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "email", + "nullable": true + }, + "buyer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "buyer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_uid_usage": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "custom_data": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "user_agent": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "status": { + "$ref": "#/components/schemas/IIamportPayment.Status" + }, + "started_at": { + "description": "결제 신청 일시.\n\n리눅스 타임이 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "paid_at": { + "description": "결제 (지불) 완료 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "failed_at": { + "description": "결제 실패 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "결제 취소 일시.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "fail_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_reason": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "cancel_history": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/IIamportPaymentCancel" + } + } + }, + "nullable": false, + "required": [ + "pay_method", + "imp_uid", + "merchant_uid", + "name", + "amount", + "cancel_amount", + "currency", + "receipt_url", + "cash_receipt_issue", + "channel", + "pg_provider", + "emb_pg_provider", + "pg_id", + "pg_tid", + "escrow", + "buyer_name", + "buyer_email", + "buyer_tel", + "buyer_addr", + "buyer_postcode", + "customer_uid", + "customer_uid_usage", + "custom_data", + "user_agent", + "status", + "started_at", + "paid_at", + "failed_at", + "cancelled_at", + "fail_reason", + "cancel_reason", + "cancel_history" + ], + "description": "결제 기본 (공통) 정보.", + "x-typia-jsDocTags": [] + }, + "IIamportPaymentCancel.IStore": { + "type": "object", + "properties": { + "imp_uid": { + "description": "결제 정보 {@link IIamportPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "취소 금액, 부분 취소도 가능하다.\n\n누락시 전액 취소.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "checksum": { + "description": "취소 트랜잭션 수행 전, 현재 시점의 취소 가능한 잔액.\n\nAPI요청자가 기록하고 있는 취소가능 잔액과 아임포트가 기록하고 있는 취소가능 잔액이\n일치하는지 사전에 검증하고, 검증에 실패하면 트랜잭션을 수행하지 않는다.\n\n`null` 인 경우에는 검증 프로세스를 생략.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number", + "nullable": true + }, + "reason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "tax_free": { + "description": "취소요청금액 중 면세금액.", + "x-typia-jsDocTags": [ + { + "name": "default", + "text": [ + { + "text": "0", + "kind": "text" + } + ] + } + ], + "x-typia-required": false, + "x-typia-optional": true, + "type": "number", + "default": 0 + }, + "refund_holder": { + "description": "환불계좌 예금주.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "refund_bank": { + "description": "환불계좌 은행 코드.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "refund_account": { + "description": "환불계좌 계좌번호.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "refund_tel": { + "description": "환불계좌 예금주 연락처", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "nullable": false, + "required": [ + "imp_uid", + "merchant_uid", + "checksum", + "reason" + ], + "description": "결제 취소 입력 정보.", + "x-typia-jsDocTags": [] + }, + "IIamportResponse_lt_IIamportReceipt_gt_": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "$ref": "#/components/schemas/IIamportReceipt" + } + }, + "nullable": false, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportReceipt": { + "type": "object", + "properties": { + "imp_uid": { + "description": "귀속 결제의 {@link IIamportPayment.imp_uid }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receipt_uid": { + "description": "현금 영수증의 고유 식별자 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "apply_num": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/IIamportReceipt.Type" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "receipt_url": { + "description": "현금영수증 조회 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + }, + "applied_at": { + "description": "현금영수증 발행 시간.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelled_at": { + "description": "현금영수증 취소 시간.\n\n리눅스 타임이 쓰이며, `null` 대신 0 을 씀.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "nullable": false, + "required": [ + "imp_uid", + "receipt_uid", + "apply_num", + "type", + "amount", + "vat", + "receipt_url", + "applied_at", + "cancelled_at" + ], + "description": "현금 영수증 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportReceipt.Type": { + "description": "현금영수증 발행 타입 (대상).", + "type": "string", + "enum": [ + "person", + "company" + ] + }, + "IIamportReceipt.IStore": { + "type": "object", + "properties": { + "imp_uid": { + "description": "귀속 결제의 {@link IIamportPayment.imp_uid }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "identifier": { + "description": "현금영수증 발생대상 식별정보.\n\n - 국세청현금영수증카드\n - 휴대폰번호\n - 주민등록번호\n - 사업자등록번호", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "identifier_type": { + "description": "현금영수증 발행대상 유형.\n\n - person: 주민등록번호\n - business: 사업자등록번호\n - phone: 휴대폰번호\n - taxcard: 국세청현금영수증카드\n\n일부 PG 사의 경우 이 항목이 없어 된다는데, 어지간하면 그냥 쓰기 바람.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "enum": [ + "phone", + "person", + "business", + "taxcard" + ] + }, + "type": { + "description": "현금영수증 발행 타입 (대상).\n\n누락시 person 이 사용됨.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "enum": [ + "person", + "company" + ] + }, + "buyer_name": { + "description": "구매자 이름.\n\n형금영수증 발행건 사후 추적을 위해 가급 입력하기 바람.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_email": { + "description": "구매자 이메일.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_tel": { + "description": "구매자 전화번호.\n\n현금영수증 발행건 사후 추적을 위해 가급 입력하기 바람.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "tax_free": { + "description": "면세 금액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + } + }, + "nullable": false, + "required": [ + "imp_uid", + "identifier" + ], + "description": "현금영수증 입력 정보.", + "x-typia-jsDocTags": [] + }, + "IIamportUser.IAccessor": { + "type": "object", + "properties": { + "imp_key": { + "description": "API 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "imp_secret": { + "description": "Secret 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": false, + "required": [ + "imp_key", + "imp_secret" + ], + "description": "아임포트에서 부여해 준 API 및 secret 키.", + "x-typia-jsDocTags": [] + }, + "IIamportResponse_lt_IIamportUser_gt_": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "$ref": "#/components/schemas/IIamportUser" + } + }, + "nullable": false, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportUser": { + "type": "object", + "properties": { + "now": { + "description": "토큰 발행 시간.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "expired_at": { + "description": "토큰 만료 시간.\n\n리눅스 타임이 기준이며, 이를 JS 에서 사용하려거든, 아래와 같이 변환해야 한다.\n\n```typescript\nnew Date(user.expired_at * 1_000);\n```", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "access_token": { + "description": "유저 인증 토큰.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": false, + "required": [ + "now", + "expired_at", + "access_token" + ], + "description": "아임포트 유저 인증 정보.\n\n아임포트는 고객사에게 API 및 secret 키 정보, {@link IIamportUser.IAccessor } 를 발급해준다.\n\n하지만 이를 곧장 아임포트의 유저 인증에 사용할 수는 없고, 해당 API 및 secret 키를 토대로 유저\n인증 토큰을 발급받아야 하는데, 이 유저 인증 토큰에는 하필이면 만로 시간이라는 게 존재한다.\n`IIamportUser` 는 바로 이러한 유저 인증 토큰 및 그것의 만료 시간을 형상화한 자료구조\n인터페이스이다.\n\n더하여 이처럼 만료 시간이 존재하는 아임포트의 유저 인증 토큰의 특성상, 이것의 만료 시간이\n초과되지 않도록 관리하는 것은 매우 힘든 일이다. 이에 `iamport-server-api` 에서는 아임포트\n유저 인증 토큰이 만료될 때마다 자동 갱신해주는, {@link IamportConnector } 클래스를 제공한다.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportVBankPayment.IStore": { + "type": "object", + "properties": { + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트 서버가 아닌, 이를 사용하는 서비스가 자체적으로 발급하고 관리한다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vbank_code": { + "description": "가상계좌 은행 코드.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "vbank_due": { + "description": "가상계좌 입금기한, 유닉스 타임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vbank_holder": { + "description": "예금주.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_email": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_tel": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_addr": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_postcode": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "pg": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "notice_url": { + "description": "가상 계좌 입금 정보를 수신할 URL.\n\n누락시 기본 웹훅 URL 사용.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "custom_data": { + "description": "커스텀 데이터, 자유롭게 사용 가능.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "pg_api_key": { + "description": "[이니시스 전용] 가맹점 콘솔에서 확인한 API 값.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "nullable": false, + "required": [ + "merchant_uid", + "amount", + "vbank_code", + "vbank_due", + "vbank_holder" + ], + "description": "가상 계좌 결제 입력 정보.\n\n가상 계좌를 임의 생성할 수 있다.\n\n단, 일부 PG 사 혹은 `fake-iamport-server` 만 가능.\n\n - 세틀뱅크\n - 나이스페이먼츠\n - KG이니시스", + "x-typia-jsDocTags": [] + }, + "IIamportResponse_lt_IIamportVBankPayment_gt_": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "$ref": "#/components/schemas/IIamportVBankPayment" + } + }, + "nullable": false, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportVBankPayment.IUpdate": { + "type": "object", + "properties": { + "imp_uid": { + "description": "대상 결제 기록의 {@link IIamportPayment.imp_uid }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "수정할 결제 금액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "vbank_due": { + "description": "수정할 가상계좌 입금 기한.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + } + }, + "nullable": false, + "required": [ + "imp_uid" + ], + "description": "가상 계좌 결제의 수정 입력 정보.\n\n아직 입금되지 않은 가상계좌의 입금기한 또는 입금금액을 수정할 수 있다.\n\n다만, 세틀뱅크 혹은 `fake-iamport-server` 만 가능.", + "x-typia-jsDocTags": [] + }, + "IIamportResponse_lt_IIamportSubscription_gt_": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "$ref": "#/components/schemas/IIamportSubscription" + } + }, + "nullable": false, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportSubscription": { + "type": "object", + "properties": { + "pg_provider": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "pg_id": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_code": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_number": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "card_type": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customer_name": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_tel": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_email": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_addr": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "customer_postcode": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "nullable": true + }, + "inserted": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "updated": { + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": false, + "required": [ + "pg_provider", + "pg_id", + "card_name", + "card_code", + "card_number", + "card_type", + "customer_name", + "customer_tel", + "customer_email", + "customer_addr", + "customer_postcode", + "inserted", + "updated", + "customer_uid" + ], + "description": "간편 결제 카드 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportSubscription.IStore": { + "type": "object", + "properties": { + "card_number": { + "description": "카드 번호.\n\n형식: XXXX-XXXX-XXXX-XXXX", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}" + }, + "expiry": { + "description": "카드 유효기간.\n\n형식: YYYY-MM", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})-(0[1-9]|1[012])$" + }, + "birth": { + "description": "생년월일 YYMMDD 또는 사업자등록번호 10자리.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$" + }, + "pwd_2digit": { + "description": "카드 비밀번호 앞 두 자리.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "pattern": "\\d{2}" + }, + "cvc": { + "description": "카드 인증번호 (카드 뒷면 3 자리).", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "pattern": "\\d{2}" + }, + "customer_name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_tel": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_email": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "customr_addr": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_postcode": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": false, + "required": [ + "card_number", + "expiry", + "birth", + "customer_uid" + ], + "description": "간편 결제 카드 입력 정보.", + "x-typia-jsDocTags": [] + }, + "IIamportSubscription.IOnetime": { + "type": "object", + "properties": { + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.\n\n이를 생략시 단순 결제로만 그치며, 카드 정보가 간편 결제용으로 등록되지 아니함.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "card_number": { + "description": "카드 번호.\n\n형식: XXXX-XXXX-XXXX-XXXX", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{4}-\\d{4}-\\d{4}-\\d{4}" + }, + "expiry": { + "description": "카드 유효기간.\n\n형식: YYYY-MM", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{4})-(0[1-9]|1[012])$" + }, + "birth": { + "description": "생년월일 YYMMDD 또는 사업자등록번호 10자리.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^(([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01]))|(\\d{10})$" + }, + "pwd_2digit": { + "description": "카드 비밀번호 앞 두 자리.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "pattern": "\\d{2}" + }, + "cvc": { + "description": "카드 인증번호 (카드 뒷면 3 자리).", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "pattern": "\\d{2}" + }, + "customer_name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_tel": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_email": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "customr_addr": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customer_postcode": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트가 아닌 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "name": { + "description": "주문 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "통화 정보.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "tax_free": { + "description": "면세 공급가액.\n\n기본값은 0 로써, 알아서 amount 의 1/11 로써 부가세 처리됨.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "card_quota": { + "description": "할부 개월 수.\n\n일시불은 0.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "buyer_name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_email": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "buyer_tel": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_addr": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_postcode": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "interest_free_by_merchant": { + "description": "카드할부처리할 때, 할부이자가 발생하는 경우 (카드사 무이자 프로모션 제외).\n\n부과되는 할부이자를 고객대신 가맹점이 지불하고자 PG사와 계약된 경우(현재, 나이스페이먼츠만 지원됨)", + "x-typia-required": false, + "x-typia-optional": true, + "type": "boolean" + }, + "use_card_point": { + "description": "승인요청시 카드사 포인트 차감하며 결제승인처리할지 flag.\n\nPG사 영업담당자와 계약 당시 사전 협의 필요(현재, 나이스페이먼츠만 지원됨)", + "x-typia-required": false, + "x-typia-optional": true, + "type": "boolean" + }, + "custom_data": { + "description": "임의 정보를 기재할 수 있다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "notice_url": { + "description": "결제 성공시 통지될 Notification, 웹훅 URL.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "url" + } + }, + "nullable": false, + "required": [ + "card_number", + "expiry", + "birth", + "merchant_uid", + "amount", + "name" + ], + "description": "결제 신청 입력 정보.", + "x-typia-jsDocTags": [] + }, + "IIamportResponse_lt_IIamportCardPayment_gt_": { + "type": "object", + "properties": { + "code": { + "description": "에러 코드.\n\n값이 0 이면 오류가 없다는 뜻.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "message": { + "description": "성공 또는 오류 메시지.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "response": { + "$ref": "#/components/schemas/IIamportCardPayment" + } + }, + "nullable": false, + "required": [ + "code", + "message", + "response" + ], + "description": "아임포트 고유의 응답 데이터.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "IIamportSubscription.IAgain": { + "type": "object", + "properties": { + "merchant_uid": { + "description": "주문 식별자 키.\n\n아임포트가 아닌 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "name": { + "description": "주문 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "통화 정보.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "enum": [ + "KRW", + "USD", + "EUR", + "JPY" + ] + }, + "tax_free": { + "description": "면세 공급가액.\n\n기본값은 0 로써, 알아서 amount 의 1/11 로써 부가세 처리됨.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "card_quota": { + "description": "할부 개월 수.\n\n일시불은 0.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "buyer_name": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_email": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "buyer_tel": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_addr": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "buyer_postcode": { + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "interest_free_by_merchant": { + "description": "카드할부처리할 때, 할부이자가 발생하는 경우 (카드사 무이자 프로모션 제외).\n\n부과되는 할부이자를 고객대신 가맹점이 지불하고자 PG사와 계약된 경우(현재, 나이스페이먼츠만 지원됨)", + "x-typia-required": false, + "x-typia-optional": true, + "type": "boolean" + }, + "use_card_point": { + "description": "승인요청시 카드사 포인트 차감하며 결제승인처리할지 flag.\n\nPG사 영업담당자와 계약 당시 사전 협의 필요(현재, 나이스페이먼츠만 지원됨)", + "x-typia-required": false, + "x-typia-optional": true, + "type": "boolean" + }, + "custom_data": { + "description": "임의 정보를 기재할 수 있다.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "notice_url": { + "description": "결제 성공시 통지될 Notification, 웹훅 URL.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "url" + }, + "customer_uid": { + "description": "고객 식별자 키.\n\n아임포트가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.\n\n다만 고객이라기보다 실제로는 카드의 식별자 키로 써야함.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": false, + "required": [ + "merchant_uid", + "amount", + "name", + "customer_uid" + ], + "description": "간편 결제 카드로 결제 신청 입력 정보.", + "x-typia-jsDocTags": [] + } + }, + "securitySchemes": { + "bearer": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + } + } +} \ No newline at end of file diff --git a/examples/swagger/petstore.json b/examples/swagger/petstore.json new file mode 100644 index 0000000..06354c6 --- /dev/null +++ b/examples/swagger/petstore.json @@ -0,0 +1,1225 @@ +{ + "openapi": "3.0.2", + "info": { + "title": "Swagger Petstore - OpenAPI 3.0", + "description": "This is a sample Pet Store Server based on the OpenAPI 3.0 specification. You can find out more about\nSwagger at [http://swagger.io](http://swagger.io). In the third iteration of the pet store, we've switched to the design first approach!\nYou can now help us improve the API whether it's by making changes to the definition itself or to the code.\nThat way, with time, we can improve the API in general, and expose some of the new features in OAS3.\n\nSome useful links:\n- [The Pet Store repository](https://github.com/swagger-api/swagger-petstore)\n- [The source API definition for the Pet Store](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml)", + "termsOfService": "http://swagger.io/terms/", + "contact": { + "email": "apiteam@swagger.io" + }, + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + }, + "version": "1.0.17" + }, + "externalDocs": { + "description": "Find out more about Swagger", + "url": "http://swagger.io" + }, + "servers": [ + { + "url": "/api/v3" + } + ], + "tags": [ + { + "name": "pet", + "description": "Everything about your Pets", + "externalDocs": { + "description": "Find out more", + "url": "http://swagger.io" + } + }, + { + "name": "store", + "description": "Access to Petstore orders", + "externalDocs": { + "description": "Find out more about our store", + "url": "http://swagger.io" + } + }, + { + "name": "user", + "description": "Operations about user" + } + ], + "paths": { + "/pet": { + "put": { + "tags": [ + "pet" + ], + "summary": "Update an existing pet", + "description": "Update an existing pet by Id", + "operationId": "updatePet", + "requestBody": { + "description": "Update an existent pet in the store", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + } + } + }, + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Pet not found" + }, + "405": { + "description": "Validation exception" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + }, + "post": { + "tags": [ + "pet" + ], + "summary": "Add a new pet to the store", + "description": "Add a new pet to the store", + "operationId": "addPet", + "requestBody": { + "description": "Create a new pet in the store", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + } + } + }, + "405": { + "description": "Invalid input" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/pet/findByStatus": { + "get": { + "tags": [ + "pet" + ], + "summary": "Finds Pets by status", + "description": "Multiple status values can be provided with comma separated strings", + "operationId": "findPetsByStatus", + "parameters": [ + { + "name": "status", + "in": "query", + "description": "Status values that need to be considered for filter", + "required": false, + "explode": true, + "schema": { + "type": "string", + "default": "available", + "enum": [ + "available", + "pending", + "sold" + ] + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/xml": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Pet" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Pet" + } + } + } + } + }, + "400": { + "description": "Invalid status value" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/pet/findByTags": { + "get": { + "tags": [ + "pet" + ], + "summary": "Finds Pets by tags", + "description": "Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.", + "operationId": "findPetsByTags", + "parameters": [ + { + "name": "tags", + "in": "query", + "description": "Tags to filter by", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/xml": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Pet" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Pet" + } + } + } + } + }, + "400": { + "description": "Invalid tag value" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/pet/{petId}": { + "get": { + "tags": [ + "pet" + ], + "summary": "Find pet by ID", + "description": "Returns a single pet", + "operationId": "getPetById", + "parameters": [ + { + "name": "petId", + "in": "path", + "description": "ID of pet to return", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + } + } + }, + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Pet not found" + } + }, + "security": [ + { + "api_key": [] + }, + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + }, + "post": { + "tags": [ + "pet" + ], + "summary": "Updates a pet in the store with form data", + "description": "", + "operationId": "updatePetWithForm", + "parameters": [ + { + "name": "petId", + "in": "path", + "description": "ID of pet that needs to be updated", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "name", + "in": "query", + "description": "Name of pet that needs to be updated", + "schema": { + "type": "string" + } + }, + { + "name": "status", + "in": "query", + "description": "Status of pet that needs to be updated", + "schema": { + "type": "string" + } + } + ], + "responses": { + "405": { + "description": "Invalid input" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + }, + "delete": { + "tags": [ + "pet" + ], + "summary": "Deletes a pet", + "description": "", + "operationId": "deletePet", + "parameters": [ + { + "name": "api_key", + "in": "header", + "description": "", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "petId", + "in": "path", + "description": "Pet id to delete", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "400": { + "description": "Invalid pet value" + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/pet/{petId}/uploadImage": { + "post": { + "tags": [ + "pet" + ], + "summary": "uploads an image", + "description": "", + "operationId": "uploadFile", + "parameters": [ + { + "name": "petId", + "in": "path", + "description": "ID of pet to update", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "additionalMetadata", + "in": "query", + "description": "Additional Metadata", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse" + } + } + } + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/store/inventory": { + "get": { + "tags": [ + "store" + ], + "summary": "Returns pet inventories by status", + "description": "Returns a map of status codes to quantities", + "operationId": "getInventory", + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + "security": [ + { + "api_key": [] + } + ] + } + }, + "/store/order": { + "post": { + "tags": [ + "store" + ], + "summary": "Place an order for a pet", + "description": "Place a new order in the store", + "operationId": "placeOrder", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Order" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Order" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/Order" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Order" + } + } + } + }, + "405": { + "description": "Invalid input" + } + } + } + }, + "/store/order/{orderId}": { + "get": { + "tags": [ + "store" + ], + "summary": "Find purchase order by ID", + "description": "For valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions.", + "operationId": "getOrderById", + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "ID of order that needs to be fetched", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Order" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Order" + } + } + } + }, + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Order not found" + } + } + }, + "delete": { + "tags": [ + "store" + ], + "summary": "Delete purchase order by ID", + "description": "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", + "operationId": "deleteOrder", + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "ID of the order that needs to be deleted", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Order not found" + } + } + } + }, + "/user": { + "post": { + "tags": [ + "user" + ], + "summary": "Create user", + "description": "This can only be done by the logged in user.", + "operationId": "createUser", + "requestBody": { + "description": "Created user object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/User" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "responses": { + "default": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + } + } + } + }, + "/user/createWithList": { + "post": { + "tags": [ + "user" + ], + "summary": "Creates list of users with given input array", + "description": "Creates list of users with given input array", + "operationId": "createUsersWithListInput", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + } + }, + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/User" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "default": { + "description": "successful operation" + } + } + } + }, + "/user/login": { + "get": { + "tags": [ + "user" + ], + "summary": "Logs user into the system", + "description": "", + "operationId": "loginUser", + "parameters": [ + { + "name": "username", + "in": "query", + "description": "The user name for login", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "password", + "in": "query", + "description": "The password for login in clear text", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "headers": { + "X-Rate-Limit": { + "description": "calls per hour allowed by the user", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "X-Expires-After": { + "description": "date in UTC when token expires", + "schema": { + "type": "string", + "format": "date-time" + } + } + }, + "content": { + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Invalid username/password supplied" + } + } + } + }, + "/user/logout": { + "get": { + "tags": [ + "user" + ], + "summary": "Logs out current logged in user session", + "description": "", + "operationId": "logoutUser", + "parameters": [], + "responses": { + "default": { + "description": "successful operation" + } + } + } + }, + "/user/{username}": { + "get": { + "tags": [ + "user" + ], + "summary": "Get user by user name", + "description": "", + "operationId": "getUserByName", + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The name that needs to be fetched. Use user1 for testing. ", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/User" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "400": { + "description": "Invalid username supplied" + }, + "404": { + "description": "User not found" + } + } + }, + "put": { + "tags": [ + "user" + ], + "summary": "Update user", + "description": "This can only be done by the logged in user.", + "operationId": "updateUser", + "parameters": [ + { + "name": "username", + "in": "path", + "description": "name that need to be deleted", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Update an existent user in the store", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/User" + } + }, + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "responses": { + "default": { + "description": "successful operation" + } + } + }, + "delete": { + "tags": [ + "user" + ], + "summary": "Delete user", + "description": "This can only be done by the logged in user.", + "operationId": "deleteUser", + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The name that needs to be deleted", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "400": { + "description": "Invalid username supplied" + }, + "404": { + "description": "User not found" + } + } + } + } + }, + "components": { + "schemas": { + "Order": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "petId": { + "type": "integer", + "format": "int64", + "example": 198772 + }, + "quantity": { + "type": "integer", + "format": "int32", + "example": 7 + }, + "shipDate": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string", + "description": "Order Status", + "example": "approved", + "enum": [ + "placed", + "approved", + "delivered" + ] + }, + "complete": { + "type": "boolean" + } + }, + "xml": { + "name": "order" + } + }, + "Customer": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 100000 + }, + "username": { + "type": "string", + "example": "fehguy" + }, + "address": { + "type": "array", + "xml": { + "name": "addresses", + "wrapped": true + }, + "items": { + "$ref": "#/components/schemas/Address" + } + } + }, + "xml": { + "name": "customer" + } + }, + "Address": { + "type": "object", + "properties": { + "street": { + "type": "string", + "example": "437 Lytton" + }, + "city": { + "type": "string", + "example": "Palo Alto" + }, + "state": { + "type": "string", + "example": "CA" + }, + "zip": { + "type": "string", + "example": "94301" + } + }, + "xml": { + "name": "address" + } + }, + "Category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { + "type": "string", + "example": "Dogs" + } + }, + "xml": { + "name": "category" + } + }, + "User": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "username": { + "type": "string", + "example": "theUser" + }, + "firstName": { + "type": "string", + "example": "John" + }, + "lastName": { + "type": "string", + "example": "James" + }, + "email": { + "type": "string", + "example": "john@email.com" + }, + "password": { + "type": "string", + "example": "12345" + }, + "phone": { + "type": "string", + "example": "12345" + }, + "userStatus": { + "type": "integer", + "description": "User Status", + "format": "int32", + "example": 1 + } + }, + "xml": { + "name": "user" + } + }, + "Tag": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + }, + "xml": { + "name": "tag" + } + }, + "Pet": { + "required": [ + "name", + "photoUrls" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { + "type": "string", + "example": "doggie" + }, + "category": { + "$ref": "#/components/schemas/Category" + }, + "photoUrls": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "type": "string", + "xml": { + "name": "photoUrl" + } + } + }, + "tags": { + "type": "array", + "xml": { + "wrapped": true + }, + "items": { + "$ref": "#/components/schemas/Tag" + } + }, + "status": { + "type": "string", + "description": "pet status in the store", + "enum": [ + "available", + "pending", + "sold" + ] + } + }, + "xml": { + "name": "pet" + } + }, + "ApiResponse": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "type": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "xml": { + "name": "##default" + } + } + }, + "requestBodies": { + "Pet": { + "description": "Pet object that needs to be added to the store", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + } + } + }, + "UserArray": { + "description": "List of user object", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + } + } + }, + "securitySchemes": { + "petstore_auth": { + "type": "oauth2", + "flows": { + "implicit": { + "authorizationUrl": "https://petstore3.swagger.io/oauth/authorize", + "scopes": { + "write:pets": "modify pets in your account", + "read:pets": "read your pets" + } + } + } + }, + "api_key": { + "type": "apiKey", + "name": "api_key", + "in": "header" + } + } + } +} \ No newline at end of file diff --git a/examples/swagger/shopping.json b/examples/swagger/shopping.json new file mode 100644 index 0000000..c814d21 --- /dev/null +++ b/examples/swagger/shopping.json @@ -0,0 +1,17538 @@ +{ + "openapi": "3.1.0", + "servers": [ + { + "url": "http://localhost:37001", + "description": "Local Server" + } + ], + "info": { + "version": "0.4.0", + "title": "@samchon/shopping-backend", + "description": "Backend for shopping", + "license": { + "name": "MIT" + } + }, + "paths": { + "/monitors/health": { + "get": { + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "description": "" + } + }, + "summary": "Health check API", + "description": "Health check API." + } + }, + "/monitors/performance": { + "get": { + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "description": "Performance info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPerformance" + } + } + } + } + }, + "summary": "Get performance information", + "description": "Get performance information.\n\nGet perofmration information composed with CPU, memory and resource usage." + } + }, + "/monitors/system": { + "get": { + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "description": "System info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ISystem" + } + } + } + } + }, + "summary": "Get system information", + "description": "Get system information.\n\nGet system information with commit and package information.\n\nAs such information is a type of sensitive, response be encrypted." + } + }, + "/shoppings/admins/authenticate": { + "get": { + "tags": [ + "Authenticate" + ], + "parameters": [], + "responses": { + "200": { + "description": "Admin info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + } + } + } + } + }, + "summary": "Get administrator information", + "description": "Get administrator information.\n\nGet {@link IShoppingAdministrator.IInvert administrator} information of\ncurrent {@link IShoppingCustomer customer}.\n\nIf current {@link IShoppingMember member} is not an administrator,\nit throws 403 forbidden exception." + }, + "post": { + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "Joining request info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IJoin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Administrator info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + } + } + } + } + }, + "summary": "Join as an administrator", + "description": "Join as an administrator.\n\nJoin as an administrator with {@link IShoppingAdministrator.IJoin joining info}.\n\nThis method is allowed only when the {@link IShoppingCustomer customer} already\nhas joined the {@link IShoppingMember membership}. IF not, he (she) must\naccomplish it before. If not, 403 forbidden exception would be thrown." + } + }, + "/shoppings/admins/authenticate/login": { + "put": { + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "Login request info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.ILogin" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Administrator info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + } + } + } + } + }, + "summary": "Login as an administrator", + "description": "Login as an administrator.\n\nLogin as an administrator with {@link IShoppingAdministrator.ILogin login info}.\n\nThis method has exactly same effect with\n{@link ShoppingApi.functional.customers.authenticate.login } function, but\nreturned type is a llttle different. The similar function returns\n{@link IShoppingCustomer } type that starting from the customer information, so\nthat you have to access to the administrator info through\n`customer.member.administrator`. In contrast with that, this method returns\n{@link IShoppingAdministrator.IInvert } type that starting from the administrator\ninfo, so that can access to the customer info through `administrator.customer`.\n\nOf course, to use this function, you had to {@link join } as an administrator\nbefore. If not, 403 forbidden exception would be thrown," + } + }, + "/shoppings/admins/coupons": { + "post": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of the coupon", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created coupon", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "summary": "Create a new coupon", + "description": "Create a new coupon.\n\nCreate a new {@link IShoppingCoupon coupon} with given information.\n\nBy the way, if you are a {@link IShoppingSeller seller}, you have to\nadd include direction's {@link IShoppingCouponSellerCriteria } or\n{@link IShoppingCouponSaleCriteria } condition. This is because only\n{@link IShoppingAdministrator administrators} can create a coupon\nwhich can be used throughout the market. Seller must limit the usage\nrange by his/her {@link IShoppingSale sale(s)}.\n\nOf course, when adminstrator is planning to make a general coupon\nthat can be used throughout the market, the administrator must\nget agree from the sellers who are going to be affected." + }, + "patch": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated coupons", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCoupon" + } + } + } + } + }, + "summary": "List up every coupons", + "description": "List up every coupons.\n\nList up every {@link IShoppingCoupon coupons} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingCoupon.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nonly {@link IShoppingCouponTicket ticketable} coupons would be listed up.\nOtherwise, non-ticketable coupons would also be listed up." + } + }, + "/shoppings/admins/coupons/{id}": { + "delete": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Target coupon's ", + "required": true + } + ], + "responses": { + "200": { + "description": "" + } + }, + "summary": "Erase a coupon", + "description": "Erase a coupon.\n\nErase a {@link IShoppingCoupon coupon} with given ID.\n\nFor reference, if there're some {@link IShoppingCouponTicket tickets}\nwhich are already issued from the target coupon, they would not be affected.\nThose tickets are still valid until their expration time." + }, + "get": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Target coupon's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Coupon info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "summary": "Get a coupon info", + "description": "Get a coupon info.\n\nGet a {@link IShoppingCoupon coupon} information.\n\nIf you are a {@link IShoppingCustomer customer}, then only\n{@link IShoppingCouponTicket ticketable} coupons are accessible. Non\nticketable coupons cause 410 gone error. Otherwise you are a\n{@link IShoppingSeller seller} or {@link IShoppingAdministrator administrator},\nnon-ticketable coupons are also accessible." + } + }, + "/shoppings/admins/deposits": { + "patch": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated deposit metadata list", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDeposit" + } + } + } + } + }, + "summary": "Get deposit metadata list", + "description": "Get deposit metadata list.\n\nList up every {@link IShoppingDeposit deposit} metadata informations\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDeposit.IRequest.search search condition} in the request body.\nAlso, it is possible to customize sequence order of records by configuring\n{@link IShoppingDeposit.IRequest.sort sort condition}." + }, + "post": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Creation information of deposit metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created deposit metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit" + } + } + } + } + }, + "summary": "Create a new deposit metadata", + "description": "Create a new deposit metadata.\n\nCreate a new {@link IShoppingDeposit deposit} metadata.\n\nThis action means that adding a new origin reason of deposit's income/outcome.\nOf course, creating a new deposit record does not mean that automatically\nincrease or decrease the {@link IShoppingCustomer customer}'s balance\nfollowing the record's reason why. The logic must be developed manually\nin the backend side." + } + }, + "/shoppings/admins/deposits/{id}": { + "get": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target deposit's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Deposit metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit" + } + } + } + } + }, + "summary": "Get a deposit metadata", + "description": "Get a deposit metadata.\n\nGet a {@link IShoppingDeposit deposit} metadata information with its ID." + }, + "delete": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target deposit's ", + "required": true + } + ], + "responses": { + "200": { + "description": "" + } + }, + "summary": "Erase a deposit metadata", + "description": "Erase a deposit metadata.\n\nErase a {@link IShoppingDeposit deposit} metadata, so that no more\n{@link IShoppingCustomer customer}'s balance does not be increased or\ndecreased by the deposit's reason why." + } + }, + "/shoppings/admins/deposits/{code}/get": { + "get": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "description": "", + "required": true + } + ], + "responses": { + "200": { + "description": "Deposit metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit" + } + } + } + } + }, + "summary": "Get a deposit metadata by its code", + "description": "Get a deposit metadata by its code.\n\nGet a {@link IShoppingDeposit deposit} metadata information with its code." + } + }, + "/shoppings/admins/mileages": { + "patch": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated mileage metadata list", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingMileage" + } + } + } + } + }, + "summary": "Get mileage metadata list", + "description": "Get mileage metadata list.\n\nList up every {@link IShoppingMileage mileage} metadata informations\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileage.IRequest.search search condition} in the request body.\nAlso, it is possible to customize sequence order of records by configuring\n{@link IShoppingMileage.IRequest.sort sort condition}." + }, + "post": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Creation information of mileage metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created mileage metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage" + } + } + } + } + }, + "summary": "Create a new mileage metadata", + "description": "Create a new mileage metadata.\n\nCreate a new {@link IShoppingMileage mileage} metadata.\n\nThis action means that adding a new origin reason of mileage's income/outcome.\nOf course, creating a new mileage record does not mean that automatically\nincrease or decrease the {@link IShoppingCustomer customer}'s balance\nfollowing the record's reason why. The logic must be developed manually\nin the backend side." + } + }, + "/shoppings/admins/mileages/{id}": { + "get": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target mileage's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Mileage metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage" + } + } + } + } + }, + "summary": "Get a mileage metadata", + "description": "Get a mileage metadata.\n\nGet a {@link IShoppingMileage mileage} metadata information with its ID." + }, + "delete": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target mileage's ", + "required": true + } + ], + "responses": { + "200": { + "description": "" + } + }, + "summary": "Erase a mileage metadata", + "description": "Erase a mileage metadata.\n\nErase a {@link IShoppingMileage mileage} metadata, so that no more\n{@link IShoppingCustomer customer}'s balance does not be increased or\ndecreased by the mileage's reason why." + } + }, + "/shoppings/admins/mileages/{code}/get": { + "get": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "description": "", + "required": true + } + ], + "responses": { + "200": { + "description": "Mileage metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage" + } + } + } + } + }, + "summary": "Get a mileage metadata by its code", + "description": "Get a mileage metadata by its code.\n\nGet a {@link IShoppingMileage mileage} metadata information with its code." + } + }, + "/shoppings/admins/mileages/donations": { + "patch": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated mileage donation history list", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingMileageDonation" + } + } + } + } + }, + "summary": "List up every mileage donation histories", + "description": "List up every mileage donation histories.\n\nList up every {@link IShoppingMileageDonation mileage donation histories}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileageDonation.IRequest.search search condition} in\nthe request body. Also, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingMileageDonation.IRequest.sort sort}." + }, + "post": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Request info of mileage donation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Mileage donation history", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation" + } + } + } + } + }, + "summary": "Donate a mileage to a citizen", + "description": "Donate a mileage to a citizen.\n\nDonate a mileage to a specific {@link IShoppingCitizen citizen} from\ncurrent {@link IShoppingAdministrator administrator}, with detailed\nreason why.\n\nNote that, as donating mileage affects to the citizen's balance and\ncurrent shopping mall's operating profit, administrator must archive\nthe detailed reason why the mileage is donated." + } + }, + "/shoppings/admins/mileages/donations/{id}": { + "get": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target history's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Mileage donation history", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation" + } + } + } + } + }, + "summary": "Get a mileage donation history", + "description": "Get a mileage donation history.\n\nGet a {@link IShoppingMileageDonation mileage donation history} with its ID." + } + }, + "/shoppings/admins/orders": { + "patch": { + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated orders", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingOrder" + } + } + } + } + }, + "summary": "List up every orders", + "description": "List up every orders.\n\nList up every {@link IShoppingOrder orders} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingOrder.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingOrder.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nyou can list up your own orders, and it is not a matter whether the\norder has been {@link IShoppingOrderPublish.paid_at paid} or not.\n\nOtherwise you are a {@link IShoppingSeller seller} or\n{@link IShoppingAdministrator administrator}, then you can list up\nonly paid orders. Also, in the seller case, only related\n{@link IShoppingOrder.goods goods} would be listed up in the order." + } + }, + "/shoppings/admins/orders/{id}": { + "get": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target order's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Order info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "summary": "Get an order info", + "description": "Get an order info.\n\nGet a detailed {@link IShoppingOrder order} information.\n\nIf you are not a {@link IShoppingCustomer customer}, then you can't\naccess to the order which has not been\n{@link IShoppingOrderPublish.paid_at paid} yet. In that case,\n404 not found error would be thrown." + } + }, + "/shoppings/admins/sales": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated sales with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSale.ISummary" + } + } + } + } + }, + "summary": "List up every summarized sales", + "description": "List up every summarized sales.\n\nList up every {@link IShoppingSale.ISummary summarized sales}.\n\nAs you can see, returned sales are summarized, not detailed. If you want\nto get the detailed information of a sale, use {@link at } function for\neach sale.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}s. Otherwise you're a\n{@link IShoppingCustomer customer}, you can see only the operating\nsales in the market. You can't see the unopened, closed, or suspended\nsales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSale.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSale.IRequest.sort sort condition}." + } + }, + "/shoppings/admins/sales/{id}": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target sale's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed sale information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "summary": "Get a sale info", + "description": "Get a sale info.\n\nGet a {@link IShoppingSale sale} with detailed information.\n\nIf you're a {@link IShoppingSeller seller}, you can only access to the\nyour own {@link IShoppingSale sale}. Otherwise you're a\n{@link IShoppingCustomer customer}, you can access to only the operating\nsales in the market. You can't access to the unopened, closed, or suspended\nsales." + } + }, + "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated inquiry comments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + "post": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry's ", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + } + }, + "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments/{id}": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry comment's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed inquiry comment info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + "put": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry comment's ", + "required": true + } + ], + "requestBody": { + "description": "Update info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + } + }, + "/shoppings/admins/sales/{saleId}/questions": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated questions with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.ISummary" + } + } + } + } + }, + "summary": "List up every summarized questions", + "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + } + }, + "/shoppings/admins/sales/{saleId}/questions/abridges": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated questions with abridged information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.IAbridge" + } + } + } + } + }, + "summary": "List up every abridged questions", + "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at } function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + } + }, + "/shoppings/admins/sales/{saleId}/questions/{id}": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target question's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed question info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "summary": "Get a question info", + "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret }\nvalue is `false`." + } + }, + "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated inquiry comments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + "post": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry's ", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + } + }, + "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry comment's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed inquiry comment info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + "put": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry comment's ", + "required": true + } + ], + "requestBody": { + "description": "Update info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + } + }, + "/shoppings/admins/sales/{saleId}/reviews": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated reviews with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.ISummary" + } + } + } + } + }, + "summary": "List up every summarized reviews", + "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + } + }, + "/shoppings/admins/sales/{saleId}/reviews/abridges": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated reviews with abridged information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.IAbridge" + } + } + } + } + }, + "summary": "List up every abridged reviews", + "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at } function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + } + }, + "/shoppings/admins/sales/{saleId}/reviews/{id}": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target review's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed review info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "summary": "Get a review info", + "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales." + } + }, + "/shoppings/admins/sales/{saleId}/snapshots": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target sale's ", + "required": true + } + ], + "requestBody": { + "description": "Requestion info of pagination", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated snapshots with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleSnapshot.ISummary" + } + } + } + } + }, + "summary": "List up every snapshots", + "description": "List up every snapshots.\n\nWhenever {@link IShoppingSeller seller} updates a\n{@link IShoppingSale sale}, the sale record is not updated but a new\n{@link IShoppingSaleSnapshot snapshot} record is created to keep the\nintegrity of the sale history. This API function is for listing up\nsuch snapshot records.\n\nAlso, as you can see from the return type, returned snapshots are\nsummarized, not detailed. If you want to get the detailed information\nof a snapshot, use {@link at } or {@link flipo } function for each snapshot.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + } + }, + "/shoppings/admins/sales/{saleId}/snapshots/{id}": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target snapshot's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed information of the snapshot", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot" + } + } + } + } + }, + "summary": "Get a snapshot info", + "description": "Get a snapshot info.\n\nGet a {@link IShoppingSaleSnapshot snapshot} with detailed information.\n\nAs you can see from the return type, returned snapshot does not contain\nthe {@link IShoppingSale sale} info. If you want to get the sale info,\nuse the {@link flip } function instead.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + } + }, + "/shoppings/admins/sales/{saleId}/snapshots/{id}/flip": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target snapshot's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed sale information in the snapshot side", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "summary": "Get a flipped snapshot info", + "description": "Get a flipped snapshot info.\n\nGet a {@link IShoppingSale sale} info of a flipped snapshot.\n\nAs you can see from the return type, this function returns the\n{@link IShoppingSale sale} info. By the way, the sale info is not the\nlatest one, but a flipped info in the snapshot side.\n\nAlso, if you're a {@link IShoppingSeller seller}, you can only access to\nthe your own {@link IShoppingSale sale}'s snapshots. Otherwise, you can\naccess to every snapshots of the sales even though the sale has been\nclosed or suspended." + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories": { + "post": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Belonged channel's ", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the category", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created category", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "summary": "Create a new category", + "description": "Create a new category.\n\nCreate a new {@link IShoppingChannelCategory category} of a\n{@link IShoppingChannel channel} with given name. If required, it is\npossible to specify the parent category by its ID." + }, + "patch": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Belonged channel's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Paginated categories with children categories", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + } + } + } + } + } + }, + "summary": "List up every categories with children records", + "description": "List up every categories with children records.\n\nList up every {@link IShoppingChannelCategory.IHierarchical categories}\nof a {@link IShoppingChannel channel} with pagination. Returned categories\ncontain children categories, too.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannelCategory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingChannelCategory.IRequest.sort sort condition}." + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}": { + "put": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Belonged channel's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Target category's ", + "required": true + } + ], + "requestBody": { + "description": "Update info of the category", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "" + } + }, + "summary": "Update a category", + "description": "Update a category.\n\nUpdate a {@link IShoppingChannelCategory category}'s name. If required,\nit is possible to change the parent category by its ID. Of course, detaching\nfrom the parent category so that becoming the root category is also possible." + }, + "get": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Belonged channel's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target category's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed category info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "summary": "Get a category info", + "description": "Get a category info.\n\nGet a detailed {@link IShoppingChannelCategory category} information.\n\nReturned category contains hierarchical children categories, and also\ncontains the recursive parent categories, too." + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories/merge": { + "delete": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Belonged channel's ", + "required": true + } + ], + "requestBody": { + "description": "Merge info of the categories", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IRecordMerge" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "" + } + }, + "summary": "Merge multiple categories into one", + "description": "Merge multiple categories into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingChannelCategory category}, because it is a systematic\nentity affecting to all other core entities like\n{@link IShoppingSale sales}. Instead of deleting, you can merge multiple\ncategories into one.\n\nIf you specify a category to absorb others, then all of other categories\nwill be merged into the specified one. Also, subsidiary entities of\ncategories also be merged and their references also be merged cascadingly." + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}/invert": { + "get": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Belonged channel's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target category's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed category info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + } + } + } + }, + "summary": "Get a category info of inverted", + "description": "Get a category info of inverted.\n\nGet a inverted {@link IShoppingChannelCategory.IInvert category} information.\n\nReturned category contains the recursive parent categories, but not contains\nthe hierarchical children categories." + } + }, + "/shoppings/admins/systematic/channels": { + "post": { + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of the channel", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created channel", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel" + } + } + } + } + }, + "summary": "Create a new channel", + "description": "Create a new channel.\n\nCreate a new {@link IShoppingChannel channel} with given code and name.\n\nAs channel means an individual market,\n{@link IShoppingAdministrator administrator} should perform this action\nonly when a new application being registered." + }, + "patch": { + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated channels", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel" + } + } + } + } + }, + "summary": "List up every channels", + "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + } + }, + "/shoppings/admins/systematic/channels/{id}": { + "put": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target channel's ", + "required": true + } + ], + "requestBody": { + "description": "Update info of the channel", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "" + } + }, + "summary": "Update a channel", + "description": "Update a channel.\n\nUpdate a {@link IShoppingChannel channel}'s name.\n\nNote that, it is not possible to change the channel's code. If you want to\nto do it forcibly, then {@link create } new one and {@link merge } with it." + }, + "get": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target channel's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed channel info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "summary": "Get a channel info", + "description": "Get a channel info.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + } + }, + "/shoppings/admins/systematic/channels/merge": { + "delete": { + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "Request info of the merge", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IRecordMerge" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "" + } + }, + "summary": "Merge multiple channels into one", + "description": "Merge multiple channels into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingChannel channel}, because it is a systematic entity\naffecting to all other core entities like customers, members and\nsales. Instead of deleting, you can merge multiple channels into one.\n\nIf you specify a channel to absorb others, then all of other channels\nwill be merged into the specified one. Also, subsidiary entities of\nchannels also be merged and their references also be merged cascadingly." + } + }, + "/shoppings/admins/systematic/channels/hierarchical": { + "patch": { + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated channels with nested categories", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel.IHierarchical" + } + } + } + } + }, + "summary": "List up every channels with nested categories", + "description": "List up every channels with nested categories.\n\nList up every {@link IShoppingChannel.IHierarchical channels} with\n{@link IPage pagination}. Returned channels contain nested hierarchical\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + } + }, + "/shoppings/admins/systematic/channels/{code}/get": { + "get": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Target channel's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed channel info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "summary": "Get a channel info by its code", + "description": "Get a channel info by its code.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information\nby its code.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + } + }, + "/shoppings/admins/systematic/sections": { + "post": { + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of the section", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created section", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "summary": "Create a new section", + "description": "Create a new section.\n\nCreate a new {@link IShoppingSection section} with given code and name.\n\nAs section means a spatial unit of a market that handling different type\nof products with other section, {@link IShoppingAdministrator administrator}\nshould perform this action only when a new section being required." + }, + "patch": { + "tags": [ + "Section" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated sections", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSection" + } + } + } + } + }, + "summary": "List up every sections", + "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}." + } + }, + "/shoppings/admins/systematic/sections/{id}": { + "put": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target section's ", + "required": true + } + ], + "requestBody": { + "description": "Update info of the section", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "" + } + }, + "summary": "Update a section", + "description": "Update a section.\n\nUpdate a {@link IShoppingSection section}'s name.\n\nNote that, it is not possible to change the section's code. If you want to\nto do it forcibly, then {@link create } new one and {@link merge } with it." + }, + "get": { + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target section's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed section info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "summary": "Get a section info", + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." + } + }, + "/shoppings/admins/systematic/sections/merge": { + "delete": { + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "input Request info of the merge", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IRecordMerge" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "" + } + }, + "summary": "Merge multiple sections into one", + "description": "Merge multiple sections into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingSection section}, because it is a systematic entity\naffecting to all other core entities like {@link IShoppingSale sales}.\nInstead of deleting, you can merge multiple sections into one.\n\nIf you specify a section to absorb others, then all of other sections\nwill be merged into the specified one. Also, subsidiary entities of\nsections also be merged and their references also be merged cascadingly." + } + }, + "/shoppings/admins/systematic/sections/{code}/get": { + "get": { + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Target section's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed section info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "summary": "Get a section info by its code", + "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code." + } + }, + "/shoppings/customers/authenticate/refresh": { + "patch": { + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "Refresh token.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.IRefresh" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Customer information with new token", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.IAuthorized" + } + } + } + } + }, + "summary": "Refresh the authentication token", + "description": "Refresh the authentication token.\n\nCreate a new {@link IShoppingCustomer.IToken.access access token} of a\n{@link IShoppingCustomer customer} with the pre-issued\n{@link IShoppingCustomer.IToken.refresh refresh} token.\n\nNote that, this function is available until the\n{@link IShoppingCustomer.IToken.refreshable_until } value." + } + }, + "/shoppings/customers/authenticate": { + "get": { + "tags": [ + "Authenticate" + ], + "parameters": [], + "responses": { + "200": { + "description": "Current customer information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "summary": "Get current customer info", + "description": "Get current customer info.\n\nGet current {@link IShoppingCustomer customer} information from the\n{@link IShoppingCustomer.IToken.access access token}." + }, + "post": { + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "Creation information of the customer.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Created customer information with token.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.IAuthorized" + } + } + } + } + }, + "summary": "Create a new customer record", + "description": "Create a new customer record.\n\nThis shopping mall system defines everyone participating in this market as\na \"customer\". And the customer records are not archived based on individual\n{@link IShoppingCitizen people}, but based on the unit of connection.\nTherefore, even if it is the same person, a new {@link IShoppingCustomer }\nrecord is created every time a connection is made.\n\nTherefore, all Client Applications that access this service must first call\nthis function, report the customer's inflow path to the server, and create\nan {@link IShoppingCustomer.IToken.access access token}. If you skip this\nfunction call, all the other API functions would be prohibited. There is no\nexception, even if you want to {@link activate } your citizenship or\n{@link login } with your {@link IShoppingMember member account}. Before\nauthenticating yourself or logging in, be sure to call this function first.\nThis also applies when an {@link IShoppingAdministrator administrator} or\n{@link IShoppingSeller seller} logs in.\n\nAlso, the authentication token has an\n{@link IShoppingCustomer.IToken.expired_at expiration time}\nand cannot be used permanently. For reference, the authentication token is\nvalid for 3 hours, and if you want to maintain customer authentication even\nafter 3 hours, you must call the {@link refresh } function." + } + }, + "/shoppings/customers/authenticate/join": { + "post": { + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "Join information of the member", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.IJoin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Joined customer information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "summary": "Join membership", + "description": "Join membership.\n\n{@link IShoppingCustomer Customer} signs up for\n{@link IShoppingMember membership} of current shopping mall system.\n\nIf you've performed the {@link IShoppingCitizen citizenship}\n{@link activate activation} too, then you can skip the {@link activate }\nfunction calling everytime you log in from now on. Also, if the person had\n{@link IShoppingOrder purchased} with {@link activate } and {@link external }\nfunction calling, you can also access to the order history too. In other\nwords, activity details prior to membership registration can also be\naccessed with continuity.\n\nFor reference, as described in the {@link create } function, before calling\nthis `join` function, you must first create a customer record and token by\ncalling the {@link create } function." + } + }, + "/shoppings/customers/authenticate/login": { + "put": { + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "Login request info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.ILogin" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Logged in Customer information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "summary": "Membership login", + "description": "Membership login.\n\n{@link IShoppingCustomer Customer} logs in with his/her\n{@link IShoppingMember membership} account with the email and password.\n\nIf the {@link IShoppingMember member} has previously performed\n{@link activate citizenship activation}, the {@link IShoppingCustomer.citizen }\nvalue would be filled in accordingly. And if the member has also signed up\nas an {@link IShoppingAdministrator administrator} or\n{@link IShoppingSeller seller}, the relevant information is also entered\naccordingly.\n\nFor reference, as described in the {@link create } function, before calling\nthis `login` function, you must first create a customer record and token by\ncalling the {@link create } function." + } + }, + "/shoppings/customers/authenticate/activate": { + "post": { + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "Activation information of the citizenship", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCitizen.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Activated customer information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "summary": "Activate citizenship", + "description": "Activate citizenship.\n\n{@link IShoppingCustomer Customer} activates his/her\n{@link IShoppingCitizen citizenship} with mobile number and real name.\n\nIf the custommer already {@link join joined} to the\n{@link IShoppingMember membership}, then you can skip the citizenship\n{@link activation } function calling everytime you log in from now on.\nOf course, such story would be same to the {@link external } function, too.\n\nFor reference, as described in the {@link create } function, before calling\nthis `activate` function, you must first create a customer record and token\nby calling the {@link create } function." + } + }, + "/shoppings/customers/authenticate/external": { + "post": { + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "Enroll information of the external user", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingExternalUser.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "External user enrolled customer information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "summary": "Enroll external user info", + "description": "Enroll external user info.\n\n{@link IShoppingCustomer Customer} enrolls his/her\n{@link IShoppingExternalUser external user} information from other service.\n\nIt has similar effect with the {@link join membership joining} function,\nso that if you've performed the {@link IShoppingCitizen citizenship}\n{@link activate activation} too, then you can skip the {@link activate }\nfunction calling everytime you call this `external` function with same\ninfo from now on. Also, if the person had\n{@link IShoppingOrder purchased} with {@link activate } and {@link join }\nfunction calling, you can also access to the order history too. In other\nwords, activity details prior to external server registration can also be\naccessed with continuity.\n\nFor reference, as described in the {@link create } function, before calling\nthis `external` function, you must first create a customer record and token\nby calling the {@link create } function." + } + }, + "/shoppings/customers/authenticate/password/change": { + "put": { + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "New password and current password", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.IPasswordChange" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "" + } + }, + "summary": "Change password", + "description": "Change password.\n\nChange password of {@link IShoppingMember member} with the current password.\n\nThe reason why the current password is required is for security." + } + }, + "/shoppings/customers/coupons": { + "patch": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated coupons", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCoupon" + } + } + } + } + }, + "summary": "List up every coupons", + "description": "List up every coupons.\n\nList up every {@link IShoppingCoupon coupons} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingCoupon.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nonly {@link IShoppingCouponTicket ticketable} coupons would be listed up.\nOtherwise, non-ticketable coupons would also be listed up." + } + }, + "/shoppings/customers/coupons/{id}": { + "get": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Target coupon's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Coupon info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "summary": "Get a coupon info", + "description": "Get a coupon info.\n\nGet a {@link IShoppingCoupon coupon} information.\n\nIf you are a {@link IShoppingCustomer customer}, then only\n{@link IShoppingCouponTicket ticketable} coupons are accessible. Non\nticketable coupons cause 410 gone error. Otherwise you are a\n{@link IShoppingSeller seller} or {@link IShoppingAdministrator administrator},\nnon-ticketable coupons are also accessible." + } + }, + "/shoppings/customers/coupons/tickets": { + "patch": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated coupon tickets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCouponTicket" + } + } + } + } + }, + "summary": "List up every coupon tickets", + "description": "List up every coupon tickets.\n\nList up every {@link IShoppingCouponTicket coupon tickets} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nFor reference, coupon ticket means that a {@link IShoppingCoupon coupon}\nhas been taken by a customer. If the target coupon has expiration day or\ndate, the coupon ticket also has\n{@link IShoppingCouponTicket.expired_at expiration time}, and such expired\ntickets would not be listed up. Likewise, tickets used to\n{@link IShoppingCouponTicketPayment pay} for the {@link IShoppingOrder order}\nwould not be listed up, either.\n\nAdditionally, you can limit the result by configuring\n{@link IShoppingCouponTicket.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCouponTicket.IRequest.sort sort condition}." + }, + "post": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of coupon ticket", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created coupon ticket", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + } + } + } + }, + "summary": "Create a new coupon ticket", + "description": "Create a new coupon ticket.\n\nCreate a new {@link IShoppingCouponTicket coupon ticket} of a specific\n{@link IShoppingCoupon coupon} for the {@link IShoppingCustomer customer}.\n\nBy the way, if the target coupon has been\n{@link IShoppingCoupon.expired_at expired} or\n{@link IShoppingCoupon.IInventory.volume out of stock} or\n{@link IShoppingCoupon.IInventory.volume_per_citizen exhausted for him/her},\n410 gone exception would be thrown.\n\nAlso, even though succeeded to create a new coupon ticket from the target\ncoupon, if the coupon has expiration day or date, the newly created ticket\nalso has {@link IShoppingCouponTicket.expired_at expiration time}, and it\nwould be disabled after the expiration time." + } + }, + "/shoppings/customers/coupons/tickets/{id}": { + "get": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target coupon ticket's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Coupon ticket info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + } + } + } + }, + "summary": "Get a coupon ticket", + "description": "Get a coupon ticket.\n\nGet a {@link IShoppingCouponTicket coupon ticket} information with its ID.\n\nBy the way, if the target coupon ticket has been\n{@link IShoppingCouponTicket.expired_at expired} or used to\n{@link IShoppingCouponTicketPayment pay} for the {@link IShoppingOrder order},\n410 gone exception would be thrown." + } + }, + "/shoppings/customers/deposits/charges": { + "patch": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated deposit charges", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDepositCharge" + } + } + } + } + }, + "summary": "List up every deposit charges", + "description": "List up every deposit charges.\n\nList up every {@link IShoppingDepositCharge deposit charges} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDepositCharge.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingDepositCharge.IRequest.sort sort condition}." + }, + "post": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of the deposit charge", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created deposit charge", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge" + } + } + } + } + }, + "summary": "Create a new deposit charge application", + "description": "Create a new deposit charge application.\n\nCreate a new {@link IShoppingDepositCharge deposit charge application}.\n\nBy the way, this function does not mean completion the deposit charge, but\nmeans just {@link IShoppingCustomer customer} is appling the deposit charge.\nThe deposit charge be completed only when customer\n{@link IShoppingDepositChargePublish.publish pay} the deposit charge." + } + }, + "/shoppings/customers/deposits/charges/{id}": { + "get": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Target deposit charge's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Deposit charge info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge" + } + } + } + } + }, + "summary": "Get a deposit charge info", + "description": "Get a deposit charge info.\n\nGet a {@link IShoppingDepositCharge deposit charge} information." + }, + "put": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Target deposit charge's ", + "required": true + } + ], + "requestBody": { + "description": "Value to change", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "" + } + }, + "summary": "Update a deposit charge application", + "description": "Update a deposit charge application.\n\nUpdate value of a {@link IShoppingDepositCharge deposit charge application}\nthat has been applied by the {@link IShoppingCustomer }.\n\nIf the charge has been {@link IShoppingDepositChargePublish published},\nthen it is not possible to update the deposit charge. Only 410 gone exception\nwould be thrown." + }, + "delete": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Target deposit charge's ", + "required": true + } + ], + "responses": { + "200": { + "description": "" + } + }, + "summary": "Erase a deposit charge application", + "description": "Erase a deposit charge application.\n\nErase a {@link IShoppingDepositCharge deposit charge application} that has been\napplied by the {@link IShoppingCustomer }.\n\nIf the charge has been {@link IShoppingDepositChargePublish published}, then\nit is not possible to erase the deposit charge. In that case, you've to cancel\nthe payment by calling the {@link publish.cancel } function." + } + }, + "/shoppings/customers/deposits/charges/{chargeId}/publish/able": { + "get": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "chargeId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target charge's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Whether the charge is publishable or not", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + } + }, + "summary": "Check publishable", + "description": "Check publishable.\n\nTest whether the {@link IShoppingDepositCharge charge} is publishable or not.\n\nIf the charge has not been {@link IShoppingDepositChargePublish published} and\nnot deleted yet, then it is possible to publish the charge" + } + }, + "/shoppings/customers/deposits/charges/{chargeId}/publish": { + "post": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "chargeId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target charge's ", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the publish", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositChargePublish.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created publish", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositChargePublish" + } + } + } + } + }, + "summary": "Publish a charge", + "description": "Publish a charge.\n\n{@link IShoppingDepositChargePublish Publish} a\n{@link IShoppingDepositCharge charge} that has been applied by the\n{@link IShoppingCustomer } with payment information gotten from the\npayment vendor system.\n\nAlso, the payment time can be different with the publish time. For example,\nif the payment method is manual bank account transfer, then the payment\nwould be delayed until the customer actually transfer the money. In that\ncase, {@link IShoppingDepositChargePublish.paid_at } would be `null` value,\nso that you have to check it after calling this publish function." + } + }, + "/shoppings/customers/deposits/histories": { + "patch": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositHistory.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated deposit histories", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDepositHistory" + } + } + } + } + }, + "summary": "List up every deposit histories", + "description": "List up every deposit histories.\n\nList up every {@link IShoppingDepositHistory deposit histories} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDepositHistory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingDepositHistory.IRequest.sort sort condition}." + } + }, + "/shoppings/customers/deposits/histories/{id}": { + "get": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "", + "required": true + } + ], + "responses": { + "200": { + "description": "Deposit history info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositHistory" + } + } + } + } + }, + "summary": "Get a deposit history info", + "description": "Get a deposit history info.\n\nGet a {@link IShoppingDepositHistory deposit history} information." + } + }, + "/shoppings/customers/deposits/histories/balance": { + "get": { + "tags": [ + "Discount" + ], + "parameters": [], + "responses": { + "200": { + "description": "Balance of the deposit", + "content": { + "application/json": { + "schema": { + "type": "number" + } + } + } + } + }, + "summary": "Get balance of the deposit", + "description": "Get balance of the deposit.\n\nGet current balance of the deposit of the {@link IShoppingCustomer customer}." + } + }, + "/shoppings/customers/mileages/histories": { + "patch": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageHistory.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated mileage histories", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingMileageHistory" + } + } + } + } + }, + "summary": "List up every mileage histories", + "description": "List up every mileage histories.\n\nList up every {@link IShoppingMileageHistory mileage histories} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileageHistory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingMileageHistory.IRequest.sort sort condition}." + } + }, + "/shoppings/customers/mileages/histories/{id}": { + "get": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target mileage history's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Mileage history info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageHistory" + } + } + } + } + }, + "summary": "Get a mileage history info", + "description": "Get a mileage history info.\n\nGet a {@link IShoppingMileageHistory mileage history} information." + } + }, + "/shoppings/customers/mileages/histories/balance": { + "get": { + "tags": [ + "Discount" + ], + "parameters": [], + "responses": { + "200": { + "description": "Balance of the mileage", + "content": { + "application/json": { + "schema": { + "type": "number" + } + } + } + } + }, + "summary": "Get balance of the mileage", + "description": "Get balance of the mileage.\n\nGet current balance of the mileage of the {@link IShoppingCustomer customer}." + } + }, + "/shoppings/customers/carts/{cartId}/commodities": { + "patch": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "description": "Belonged cart's ID", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated commodities", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCartCommodity" + } + } + } + } + }, + "summary": "List of every commodities", + "description": "List of every commodities.\n\nList up every {@link IShoppingCartCommodity commodities} in the\nshopping cart with {@link IPage pagination}.\n\nIf the *cartId* is not specified but `null` value assigned, then every\ncart would be targetted. Also, you can limit the result by configuring\n{@link IShoppingCartCommodity.IRequest.search search condition} in the\nrequest body. Furthermore, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingCartCommodity.IRequest.sort }.\n\nFor reference, when some commodity be {@link IShoppingOrder ordered} and\n{@link IShoppingOrderPublish published}, then it would not be appread in\nthe shopping cart more. Otherwise, the order has not been published yet,\nit would be appread in the shopping cart and still enable to create a new\n{@link IShoppingOrder order application} with the same commodity.\n\nOf course, if the target {@link IShoppingSale sale} has been suspended, or\n{@link IShoppingSaleUnitStockInventory out of stock}, then it would not be\nappread in the shopping cart more, either." + }, + "post": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "description": "Belonged cart's ID", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the commodity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created commodity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity" + } + } + } + } + }, + "summary": "Create a new commodity", + "description": "Create a new commodity.\n\nCreate a new {@link IShoppingCartCommodity commodity} into a specific\nshopping cart.\n\nIf {@link IShoppingCartCommodity.ICreate.accumulate } has `true` value\nand there's some same commodity that composed with same\n{@link IShoppingSaleUnitStock.IInvert stocks and quantities},\nthen new commodity would not be created but the volume would be accumulated.\n\nAlso, if the *cartId* is not specified but `null` value assigned, then\nordinary cart would be utilized or create new one considering the\nexistence of the previous cart.\n\nBy the way, if the target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, then 410 gone error\nwould be thrown. Therefore, it would better to check the target sale and\n{@link IShoppingSaleUnitStock stock}'s status before." + } + }, + "/shoppings/customers/carts/{cartId}/commodities/{id}": { + "get": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "description": "Belonged cart's ID", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target commodity's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed commodity info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity" + } + } + } + } + }, + "summary": "Get a commodity", + "description": "Get a commodity.\n\nGet a {@link IShoppingCartCommodity commodity} record of the shopping cart.\n\nIf the *cartId* is different with the belonged cart's ID, then 404 not\nfound exception would be thrown. Otherwise, the *cartId* has `null` value,\nsuch dependency checking would be skipped, but still ownership would be\nvalidated.\n\nAlso, if target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, then 410 gone error\nwould be thrown. Therefore, even if you've created a commodity successfully\nwith the {@link create } method, it still can be failed when you access the\ncommodity with this {@link at } method." + }, + "put": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "description": "Belonged cart's ID", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target commodity's ", + "required": true + } + ], + "requestBody": { + "description": "Update info of the commodity (volume)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "" + } + }, + "summary": "Update a commodity (volume)", + "description": "Update a commodity (volume).\n\nUpdate a {@link IShoppingCartCommodity commodity}'s volume in the\nshopping cart.\n\nIf the *cartId* is different with the belonged cart's ID, then 404 not\nfound exception would be thrown. Otherwise, the *cartId* has `null` value,\nsuch dependency checking would be skipped, but still ownership would be\nvalidated.\n\nAlso, if target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock} suddenly, then 410\ngone error would be thrown, either." + }, + "delete": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "description": "Belonged cart's ID", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target commodity's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Newly created commodity" + } + }, + "summary": "Erase a commodity", + "description": "Erase a commodity.\n\nErase a {@link IShoppingCartCommodity commodity} from the shopping cart.\n\nIf the commodity is on an {@link IShoppingOrder order} process, it is not\npossible to erase it. Instead, if the order has been\n{@link IShoppingOrderPublish published}, then it would not be appread in\nthe shopping cart more. If the order be erased, then you also can continue\nerasinng the commodity, neither." + } + }, + "/shoppings/customers/carts/{cartId}/commodities/{id}/replica": { + "get": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "description": "Belonged cart's ID", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target commodity's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Creation info of the commodity for replication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" + } + } + } + } + }, + "summary": "Get replica of a commodity", + "description": "Get replica of a commodity.\n\nGet a {@link IShoppingCartCommodity.ICreate } typed info of the target\ncommodity for replication.\n\nBy the way, if the *cartId* is different with the belonged cart's ID,\nthen 404 not found exception would be thrown. Otherwise, the *cartId*\nhas `null` value, such dependency checking would be skipped, but still\nownership would be validated.\n\nAlso, if target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock} suddenly,\nthen 410 gone error would be thrown, either." + } + }, + "/shoppings/customers/carts/{cartId}/commodities/discountable": { + "patch": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "description": "Belonged cart's ID", + "required": true + } + ], + "requestBody": { + "description": "Request info for discountable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartDiscountable.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Discountable info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartDiscountable" + } + } + } + } + }, + "summary": "Get discountable info", + "description": "Get discountable info.\n\nCompute discountable features about the\n {@link IShoppingCartCommodity shopping cart} even including\nnon-carted {@link IShoppingSale sales}.\n\nReturned {@link IShoppingCartDiscountable } contains including\ncombinations of adjustable {@link IShoppingCoupon coupons},\nwithdrawable {@link IShoppingDepositHistory deposits} and\n{@link IShoppingMileageHistory mileages}.\n\nAlso, if you want to know the discountable info about some specific\nsales that have not been carted yet, specify the sales\nto the {@link IShoppingCartDiscountable.pseudos } property with composing\n{@link IShoppingCartCommodity.ICreate creation info of the commodities}.\nThen, they would be included in the discountable info." + } + }, + "/shoppings/customers/orders": { + "post": { + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of the order", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created order", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "summary": "Create a new order application", + "description": "Create a new order application.\n\nCreate a new {@link IShoppingOrder order application} from a\n{@link IShoppingCartCommodity shopping cart} that has been composed by the\n{@link IShoppingCustomer }. Of course, do not need to put every commodities\nto the order, but possible to select some of them by the customer.\n\nBy the way, this function does not mean completion the order, but means\njust customer is appling the order. The order be completed only when customer\n{@link IShoppingOrderPublish.paid_at pays} the order." + }, + "patch": { + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated orders", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingOrder" + } + } + } + } + }, + "summary": "List up every orders", + "description": "List up every orders.\n\nList up every {@link IShoppingOrder orders} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingOrder.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingOrder.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nyou can list up your own orders, and it is not a matter whether the\norder has been {@link IShoppingOrderPublish.paid_at paid} or not.\n\nOtherwise you are a {@link IShoppingSeller seller} or\n{@link IShoppingAdministrator administrator}, then you can list up\nonly paid orders. Also, in the seller case, only related\n{@link IShoppingOrder.goods goods} would be listed up in the order." + } + }, + "/shoppings/customers/orders/{id}": { + "delete": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target order's ", + "required": true + } + ], + "responses": { + "200": { + "description": "" + } + }, + "summary": "Erase an order application", + "description": "Erase an order application.\n\nErase an order application that has been applied by the\n{@link IShoppingCustomer }.\n\nIf the order has been {@link IShoppingOrderPublish published}, then it is\nnot possible to erase the order. In that case, you've to cancel the\npayment by calling the {@link publish.cancel } function." + }, + "get": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target order's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Order info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "summary": "Get an order info", + "description": "Get an order info.\n\nGet a detailed {@link IShoppingOrder order} information.\n\nIf you are not a {@link IShoppingCustomer customer}, then you can't\naccess to the order which has not been\n{@link IShoppingOrderPublish.paid_at paid} yet. In that case,\n404 not found error would be thrown." + } + }, + "/shoppings/customers/orders/{id}/price": { + "get": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target order's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed price info with discount", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPrice" + } + } + } + } + }, + "summary": "Get price of the order", + "description": "Get price of the order.\n\nGet detailed price information of the {@link IShoppingOrder order}.\n\nReturned price info contains not only the amount of the order, but also\ncontains the discount amount by {@link IShoppingCoupono coupons},\n{@link IShoppingDepositHistory deposits} and\n{@link IShoppingMileageHistory mileages}." + } + }, + "/shoppings/customers/orders/{id}/discountable": { + "patch": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target order's ", + "required": true + } + ], + "requestBody": { + "description": "Request info for discountable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Discountable info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable" + } + } + } + } + }, + "summary": "Get discountable info", + "description": "Get discountable info.\n\nCompute discountable features about the {@link IShoppingOrder }.\n\nRetured {@link IShoppingOrderDiscountable } contains including\ncombinations of adjustable {@link IShoppingCoupon coupons},\nwithdrawable {@link IShoppingDepositHistory deposits}\nand {@link IShoppingMileageHistory mileages}.\n\nOf course, returned features are valid only when the order has not\nbeen {@link IShoppingOrderPublish published} yet. If the order has\nalready been published, then no way to discount the price more." + } + }, + "/shoppings/customers/orders/{id}/discount": { + "put": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target order's ", + "required": true + } + ], + "requestBody": { + "description": "Discount info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPrice.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Detailed price info with discount", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPrice" + } + } + } + } + }, + "summary": "Discount the order", + "description": "Discount the order.\n\nDiscount total price of the {@link IShoppingOrder } by adjusting\n{@link IShoppingCoupon coupons}, {@link IShoppingDepositHistory deposits}\nand {@link IShoppingMileageHistory mileages}. If amount of discount\nfeatures are equal to the total price of the order, it is possible to\n{@link IShoppingOrderPublish publish} it without any cash.\n\nBy the way, the discounting features must be valid. If not, 428\nunprocessable entity error would be thrown. To know which features are\nadjustable or withdrawable, call the {@link discountable } function\nbefore." + } + }, + "/shoppings/customers/orders/{orderId}/goods/{id}/confirm": { + "put": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged order's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target good's ", + "required": true + } + ], + "responses": { + "200": { + "description": "" + } + }, + "summary": "Confirm an order good", + "description": "Confirm an order good.\n\nConfirm an {@link IShoppingOrderGood order good} that has been\ncompleted {@link IShoppingDelivery delivering} to the\n{@link IShoppingCustomer customer}.\n\nIn other words, belonged {@link IShoppingOrder order} must be\n{@link IShoppingPublish.paid_at published, paid} and delivery of\nthe good must be {@link IShoppingDeliveryJourney arrived} to the\ncustomer. If not, 428 unprocessable entity error would be thrown." + } + }, + "/shoppings/customers/orders/{orderId}/publish/able": { + "get": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target order's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Whether the order is publishable or not", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + } + }, + "summary": "Check publishable", + "description": "Check publishable.\n\nTest whether the {@link IShoppingOrder order} is publishable or not.\n\nIf the order has not been {@link IShoppingOrderPublish published} and\nnot deleted yet, then it is possible to publish the order. Even thouogh\ntarget {@link IShoppingSale sale} is suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, it is still possible\nto publish because the order already has been applied." + } + }, + "/shoppings/customers/orders/{orderId}/publish": { + "post": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target order's ", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the publish", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingOrderPublish.ICashCreate" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish.IZeroCreate" + } + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created publish", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPublish" + } + } + } + } + }, + "summary": "Publish an order", + "description": "Publish an order.\n\n{@link IShoppingOrderPublish Publish} an {@link IShoppingOrder order} that\nhas been applied by the {@link IShoppingCustomer } with\n{@link IShoppingAddress address} to delivery and payment information gotten\nfrom the payment vendor system.\n\nIf the order has been discounted for entire order price, then no need\nto send payment vendor info. Instead, only address info is required.\n\nAlso, the payment time can be different with the publish time. For example,\nif the payment method is manual bank account transfer, then the payment\nwould be delayed until the customer actually transfer the money. In that\ncase, {@link IShoppingOrderPublish.paid_at } would be `null` value, so\nthat you have to check it after calling this publish function." + }, + "delete": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target order's ", + "required": true + } + ], + "responses": { + "200": { + "description": "" + } + }, + "summary": "Cancel the publish (payment)", + "description": "Cancel the publish (payment).\n\nCancel payment of an {@link IShoppingOrder order} that has been\n{@link IShoppingOrderPublish published}.\n\nIf target publish's payment method is manual bank account transfer,\nthen it would be cancelled directly. If not, then payment cancel\nrequest would be sent to the payment vendor system." + } + }, + "/shoppings/customers/sales": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated sales with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSale.ISummary" + } + } + } + } + }, + "summary": "List up every summarized sales", + "description": "List up every summarized sales.\n\nList up every {@link IShoppingSale.ISummary summarized sales}.\n\nAs you can see, returned sales are summarized, not detailed. If you want\nto get the detailed information of a sale, use {@link at } function for\neach sale.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}s. Otherwise you're a\n{@link IShoppingCustomer customer}, you can see only the operating\nsales in the market. You can't see the unopened, closed, or suspended\nsales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSale.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSale.IRequest.sort sort condition}." + } + }, + "/shoppings/customers/sales/{id}": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target sale's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed sale information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "summary": "Get a sale info", + "description": "Get a sale info.\n\nGet a {@link IShoppingSale sale} with detailed information.\n\nIf you're a {@link IShoppingSeller seller}, you can only access to the\nyour own {@link IShoppingSale sale}. Otherwise you're a\n{@link IShoppingCustomer customer}, you can access to only the operating\nsales in the market. You can't access to the unopened, closed, or suspended\nsales." + } + }, + "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated inquiry comments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + "post": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry's ", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + } + }, + "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments/{id}": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry comment's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed inquiry comment info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + "put": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry comment's ", + "required": true + } + ], + "requestBody": { + "description": "Update info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + } + }, + "/shoppings/customers/sales/{saleId}/questions": { + "post": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the question", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created question", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "summary": "Write a question article", + "description": "Write a question article.\n\nWhen a {@link IShoppingCustomer customer} wants to ask something about\na specific {@link IShoppingSale sale}, he/she can ask it by writing a\nnew {@link IShoppingSaleQuestion question article}.\n\nIf the customer does not want to reveal his/her identify and question,\nhe/she can write the question as a secret article. In that case, only\nthe customer and the related {@link IShoppingSeller seller} can see\nthe {@link at detailed content}. Also, such secret question's title and\nwriter name would be masked with `*` characters in the\n{@link index pagiation API}." + }, + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated questions with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.ISummary" + } + } + } + } + }, + "summary": "List up every summarized questions", + "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + } + }, + "/shoppings/customers/sales/{saleId}/questions/{id}": { + "post": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target question's ", + "required": true + } + ], + "requestBody": { + "description": "Update info of the question", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created snapshot record of the question", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + } + } + } + } + }, + "summary": "Update a question", + "description": "Update a question.\n\nUpdate a {@link IShoppingSaleQuestion question}'s content.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleQuestion.ISnapshot snapshot}. And this is made public\nto everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target question's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed question info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "summary": "Get a question info", + "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret }\nvalue is `false`." + } + }, + "/shoppings/customers/sales/{saleId}/questions/abridges": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated questions with abridged information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.IAbridge" + } + } + } + } + }, + "summary": "List up every abridged questions", + "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at } function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + } + }, + "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated inquiry comments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + "post": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry's ", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + } + }, + "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry comment's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed inquiry comment info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + "put": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry comment's ", + "required": true + } + ], + "requestBody": { + "description": "Update info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + } + }, + "/shoppings/customers/sales/{saleId}/reviews": { + "post": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the review", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created review", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "summary": "Write a review article", + "description": "Write a review article.\n\nWhen a {@link IShoppingCustomer customer} has purchased a specific\n{@link IShoppingSale sale} and get {@link IShoppingDelivery delivered} it,\nhe/she can write a {@link IShoppingSaleReview review} article about the sale.\n\nIf try to write a review article without purchasing or the delivery has not\nbeen completed, 428 unprocessable entity error would be thrown. Also, the\ncustomer can write multiple review articles per an order, but the next\narticle can be written after 2 weeks from the previous article. If not,\n428 unprocessable entity error would be thrown, either." + }, + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated reviews with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.ISummary" + } + } + } + } + }, + "summary": "List up every summarized reviews", + "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + } + }, + "/shoppings/customers/sales/{saleId}/reviews/{id}": { + "post": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target review's ", + "required": true + } + ], + "requestBody": { + "description": "Update info of the review", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created snapshot record of the review", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISnapshot" + } + } + } + } + }, + "summary": "Update a review", + "description": "Update a review.\n\nUpdadte a {@link IShoppingSaleReview review}'s content and score.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleReview.ISnapshot snapshot}. And this is made public\nto everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + }, + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target review's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed review info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "summary": "Get a review info", + "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales." + } + }, + "/shoppings/customers/sales/{saleId}/reviews/abridges": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated reviews with abridged information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.IAbridge" + } + } + } + } + }, + "summary": "List up every abridged reviews", + "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at } function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + } + }, + "/shoppings/customers/sales/{saleId}/snapshots": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target sale's ", + "required": true + } + ], + "requestBody": { + "description": "Requestion info of pagination", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated snapshots with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleSnapshot.ISummary" + } + } + } + } + }, + "summary": "List up every snapshots", + "description": "List up every snapshots.\n\nWhenever {@link IShoppingSeller seller} updates a\n{@link IShoppingSale sale}, the sale record is not updated but a new\n{@link IShoppingSaleSnapshot snapshot} record is created to keep the\nintegrity of the sale history. This API function is for listing up\nsuch snapshot records.\n\nAlso, as you can see from the return type, returned snapshots are\nsummarized, not detailed. If you want to get the detailed information\nof a snapshot, use {@link at } or {@link flipo } function for each snapshot.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + } + }, + "/shoppings/customers/sales/{saleId}/snapshots/{id}": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target snapshot's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed information of the snapshot", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot" + } + } + } + } + }, + "summary": "Get a snapshot info", + "description": "Get a snapshot info.\n\nGet a {@link IShoppingSaleSnapshot snapshot} with detailed information.\n\nAs you can see from the return type, returned snapshot does not contain\nthe {@link IShoppingSale sale} info. If you want to get the sale info,\nuse the {@link flip } function instead.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + } + }, + "/shoppings/customers/sales/{saleId}/snapshots/{id}/flip": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target snapshot's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed sale information in the snapshot side", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "summary": "Get a flipped snapshot info", + "description": "Get a flipped snapshot info.\n\nGet a {@link IShoppingSale sale} info of a flipped snapshot.\n\nAs you can see from the return type, this function returns the\n{@link IShoppingSale sale} info. By the way, the sale info is not the\nlatest one, but a flipped info in the snapshot side.\n\nAlso, if you're a {@link IShoppingSeller seller}, you can only access to\nthe your own {@link IShoppingSale sale}'s snapshots. Otherwise, you can\naccess to every snapshots of the sales even though the sale has been\nclosed or suspended." + } + }, + "/shoppings/customers/systematic/channels/{channelCode}/categories": { + "patch": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Belonged channel's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Paginated categories with children categories", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + } + } + } + } + } + }, + "summary": "List up every categories with children records", + "description": "List up every categories with children records.\n\nList up every {@link IShoppingChannelCategory.IHierarchical categories}\nof a {@link IShoppingChannel channel} with pagination. Returned categories\ncontain children categories, too.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannelCategory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingChannelCategory.IRequest.sort sort condition}." + } + }, + "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}": { + "get": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Belonged channel's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target category's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed category info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "summary": "Get a category info", + "description": "Get a category info.\n\nGet a detailed {@link IShoppingChannelCategory category} information.\n\nReturned category contains hierarchical children categories, and also\ncontains the recursive parent categories, too." + } + }, + "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}/invert": { + "get": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Belonged channel's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target category's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed category info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + } + } + } + }, + "summary": "Get a category info of inverted", + "description": "Get a category info of inverted.\n\nGet a inverted {@link IShoppingChannelCategory.IInvert category} information.\n\nReturned category contains the recursive parent categories, but not contains\nthe hierarchical children categories." + } + }, + "/shoppings/customers/systematic/channels": { + "patch": { + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated channels", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel" + } + } + } + } + }, + "summary": "List up every channels", + "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + } + }, + "/shoppings/customers/systematic/channels/hierarchical": { + "patch": { + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated channels with nested categories", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel.IHierarchical" + } + } + } + } + }, + "summary": "List up every channels with nested categories", + "description": "List up every channels with nested categories.\n\nList up every {@link IShoppingChannel.IHierarchical channels} with\n{@link IPage pagination}. Returned channels contain nested hierarchical\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + } + }, + "/shoppings/customers/systematic/channels/{id}": { + "get": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target channel's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed channel info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "summary": "Get a channel info", + "description": "Get a channel info.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + } + }, + "/shoppings/customers/systematic/channels/{code}/get": { + "get": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Target channel's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed channel info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "summary": "Get a channel info by its code", + "description": "Get a channel info by its code.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information\nby its code.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + } + }, + "/shoppings/customers/systematic/sections": { + "patch": { + "tags": [ + "Section" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated sections", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSection" + } + } + } + } + }, + "summary": "List up every sections", + "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}." + } + }, + "/shoppings/customers/systematic/sections/{id}": { + "get": { + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target section's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed section info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "summary": "Get a section info", + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." + } + }, + "/shoppings/customers/systematic/sections/{code}/get": { + "get": { + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Target section's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed section info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "summary": "Get a section info by its code", + "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code." + } + }, + "/shoppings/sellers/authenticate": { + "get": { + "tags": [ + "Authenticate" + ], + "parameters": [], + "responses": { + "200": { + "description": "Seller info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + } + } + } + }, + "summary": "Get seller information", + "description": "Get seller information.\n\nGet {@link IShoppingSeller.IInvert seller} information of\ncurrent {@link IShoppingCustomer customer}.\n\nIf current {@link IShoppingMember member} is not an seller,\nit throws 403 forbidden exception." + }, + "post": { + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "Joining request info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IJoin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Seller info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + } + } + } + }, + "summary": "Join as an seller", + "description": "Join as an seller.\n\nJoin as an seller with {@link IShoppingSeller.IJoin joining info}.\n\nThis method is allowed only when the {@link IShoppingCustomer customer} already\nhas joined the {@link IShoppingMember membership}. IF not, he (she) must\naccomplish it before. If not, 403 forbidden exception would be thrown." + } + }, + "/shoppings/sellers/authenticate/login": { + "put": { + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "Login request info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.ILogin" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Seller info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + } + } + } + }, + "summary": "Login as an seller", + "description": "Login as an seller.\n\nLogin as an seller with {@link IShoppingSeller.ILogin login info}.\n\nThis method has exactly same effect with\n{@link ShoppingApi.functional.customers.authenticate.login } function, but\nreturned type is a llttle different. The similar function returns\n{@link IShoppingCustomer } type that starting from the customer information, so\nthat you have to access to the seller info through\n`customer.member.seller`. In contrast with that, this method returns\n{@link IShoppingSeller.IInvert } type that starting from the seller\ninfo, so that can access to the customer info through `seller.customer`.\n\nOf course, to use this function, you had to {@link join } as an seller\nbefore. If not, 403 forbidden exception would be thrown," + } + }, + "/shoppings/sellers/deliveries": { + "patch": { + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated deliveries", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDelivery.IInvert" + } + } + } + } + }, + "summary": "Get list of deliveries", + "description": "Get list of deliveries.\n\nGet list of {@link IShoppingDelivery.IInvert deliveries} of current\n{@link IShoppingSeller seller} with {@link IPage pagination}.\n\nFor reference, returned deliveries are containing the target\n{@link IShoppingOrder.IInvertFromDelivery order} informations. Of course,\nonly related {@link IShoppingOrderGood goods} are contained in the orders.\n\nAdditionally, you can limit the result by configuring\n{@link IShoppingDelivery.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingDelivery.IRequest.sort sort condition}." + }, + "post": { + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of delivery", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created delivery", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery" + } + } + } + } + }, + "summary": "Create a delivery", + "description": "Create a delivery.\n\nCreate a {@link IShoppingDelivery delivery} record targetting\n{@link IShoppingOrder orders}, their {@link IShoppingOrderGood goods} and\n{@link IShoppingSaleUnitStock stocks} ({@link IShoppingDeliveryPiece }) with\n{@link IShoppingDeliveryJourney journeys} and\n{@link IShoppingDeliveryShipper shippers} info.\n\nNote that, composition of the {@link IShoppingDeliveryPiece } must not over\nthe required. To identify which pieces are required, recommend to call\nthe {@link incompletes } function with target orders'\n{@link IShoppingOrderPublish.id }s before calling this one." + } + }, + "/shoppings/sellers/deliveries/{id}": { + "get": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target delivery's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Delivery info with target orders", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery.IInvert" + } + } + } + } + }, + "summary": "Get a delivery", + "description": "Get a delivery.\n\nGet a {@link IShoppingDelivery.IInvert delivery} information with its ID.\n\nFor reference, returned delivery is containing the target\n{@link IShoppingOrder.IInvertFromDelivery order} informations. Of course,\nonly related {@link IShoppingOrderGood goods} are contained in the orders." + } + }, + "/shoppings/sellers/deliveries/incompletes": { + "patch": { + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "List of target orders' ", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "List of incomplete pieces", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece.ICreate" + } + } + } + } + } + }, + "summary": "Get list of incomplete pieces", + "description": "Get list of incomplete pieces.\n\nGet list of {@link IShoppingDeliveryPiece incomplete pieces} of target\norders' {@link IShoppingOrderPublish.id }s.\n\nIf you specify target orders' publish IDs, then this function returns\nincompleted pieces of the orders with computation as an Array of\n{@link IShoppingDeliveryPiece.ICreate } type.\n\nYou can utillize the result to make a huge {@link IShoppingDelivery delivery}\nfor integrated delivering, and also possible to make multiple deliveries for\nsplitted delivering." + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/journeys": { + "post": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged delivery's ", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the journey", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created journey", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney" + } + } + } + } + }, + "summary": "Create a new journey", + "description": "Create a new journey.\n\nCreate a new {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}.\n\nThis action may change the related {@link IShoppingOrderGood.state }.\nAlso, if the target journey's type is \"delivering\", whether the property\n{@link IShoppingDeliveryJourney.completed_at } is null or not affects to\nthe related goods' states. If the property is not null, the state becomes\n\"arrived\". Otherwise, the state becomes \"delivering\"." + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}/complete": { + "put": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged delivery's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target journey's ", + "required": true + } + ], + "requestBody": { + "description": "Completion time of the journey", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.IComplete" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "" + } + }, + "summary": "Complete a journey", + "description": "Complete a journey.\n\nComplete a {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}. In other words, fills the\n{@link IShoppingDeliveryJourney.completed_at } property with current time.\n\nIf the target journey's type is \"delivering\", this action may change\nthe related {@link IShoppingOrderGood.state goods' states} to be \"arrived\"." + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}": { + "delete": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged delivery's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target journey's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Newly created journey" + } + }, + "summary": "Erase a journey", + "description": "Erase a journey.\n\nErase a {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}.\n\nIf erasing journey is the last one of the belonged delivery, this action\nmay change the related {@link IShoppingOrderGood.state }. By erasing the last\njourney, the state rolls back to the previous." + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/shippers": { + "post": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged delivery's ", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the shipper", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created shipper", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper" + } + } + } + } + }, + "summary": "Create a new shipper", + "description": "Create a new shipper.\n\nCreate a new {@link IShoppingDeliveryShipper shipper} of the\n{@link IShoppingDelivery delivery}.\n\nThis action does not affect to the related {@link IShoppingOrder orders} or\n{@link IShoppingOrderGood goods} like {@link IShoppingDeliveryJourney }\nor {@link IShoppingDeliveryPiece } case, but just informs to the\n{@link IShoppingCustomer customer}." + } + }, + "/shoppings/sellers/coupons": { + "post": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of the coupon", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created coupon", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "summary": "Create a new coupon", + "description": "Create a new coupon.\n\nCreate a new {@link IShoppingCoupon coupon} with given information.\n\nBy the way, if you are a {@link IShoppingSeller seller}, you have to\nadd include direction's {@link IShoppingCouponSellerCriteria } or\n{@link IShoppingCouponSaleCriteria } condition. This is because only\n{@link IShoppingAdministrator administrators} can create a coupon\nwhich can be used throughout the market. Seller must limit the usage\nrange by his/her {@link IShoppingSale sale(s)}.\n\nOf course, when adminstrator is planning to make a general coupon\nthat can be used throughout the market, the administrator must\nget agree from the sellers who are going to be affected." + }, + "patch": { + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated coupons", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCoupon" + } + } + } + } + }, + "summary": "List up every coupons", + "description": "List up every coupons.\n\nList up every {@link IShoppingCoupon coupons} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingCoupon.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nonly {@link IShoppingCouponTicket ticketable} coupons would be listed up.\nOtherwise, non-ticketable coupons would also be listed up." + } + }, + "/shoppings/sellers/coupons/{id}": { + "delete": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Target coupon's ", + "required": true + } + ], + "responses": { + "200": { + "description": "" + } + }, + "summary": "Erase a coupon", + "description": "Erase a coupon.\n\nErase a {@link IShoppingCoupon coupon} with given ID.\n\nFor reference, if there're some {@link IShoppingCouponTicket tickets}\nwhich are already issued from the target coupon, they would not be affected.\nThose tickets are still valid until their expration time." + }, + "get": { + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Target coupon's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Coupon info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "summary": "Get a coupon info", + "description": "Get a coupon info.\n\nGet a {@link IShoppingCoupon coupon} information.\n\nIf you are a {@link IShoppingCustomer customer}, then only\n{@link IShoppingCouponTicket ticketable} coupons are accessible. Non\nticketable coupons cause 410 gone error. Otherwise you are a\n{@link IShoppingSeller seller} or {@link IShoppingAdministrator administrator},\nnon-ticketable coupons are also accessible." + } + }, + "/shoppings/sellers/orders": { + "patch": { + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated orders", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingOrder" + } + } + } + } + }, + "summary": "List up every orders", + "description": "List up every orders.\n\nList up every {@link IShoppingOrder orders} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingOrder.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingOrder.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nyou can list up your own orders, and it is not a matter whether the\norder has been {@link IShoppingOrderPublish.paid_at paid} or not.\n\nOtherwise you are a {@link IShoppingSeller seller} or\n{@link IShoppingAdministrator administrator}, then you can list up\nonly paid orders. Also, in the seller case, only related\n{@link IShoppingOrder.goods goods} would be listed up in the order." + } + }, + "/shoppings/sellers/orders/{id}": { + "get": { + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target order's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Order info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "summary": "Get an order info", + "description": "Get an order info.\n\nGet a detailed {@link IShoppingOrder order} information.\n\nIf you are not a {@link IShoppingCustomer customer}, then you can't\naccess to the order which has not been\n{@link IShoppingOrderPublish.paid_at paid} yet. In that case,\n404 not found error would be thrown." + } + }, + "/shoppings/sellers/sales": { + "post": { + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of the sale", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created sale", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "summary": "Create a sale", + "description": "Create a sale.\n\n{@link IShoppingSeller Seller} creates a new {@link IShoppingSale } for\noperation.\n\nFor reference, sale has complicate hierarchical structure that composing\nwith {@link IShoppingSaleUnit units}, {@link IShoppingSaleUnitOption options}\nand {@link IShoppingSaleUnitStock stocks}. Therefore, I recommend you to\nread the {@link IShoppingSale } and related DTOs' documents before creating\na new sale.\n\nERD (Entity Relationship Diagram) and its description document also would\nbe helpful, too." + }, + "patch": { + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated sales with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSale.ISummary" + } + } + } + } + }, + "summary": "List up every summarized sales", + "description": "List up every summarized sales.\n\nList up every {@link IShoppingSale.ISummary summarized sales}.\n\nAs you can see, returned sales are summarized, not detailed. If you want\nto get the detailed information of a sale, use {@link at } function for\neach sale.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}s. Otherwise you're a\n{@link IShoppingCustomer customer}, you can see only the operating\nsales in the market. You can't see the unopened, closed, or suspended\nsales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSale.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSale.IRequest.sort sort condition}." + } + }, + "/shoppings/sellers/sales/{id}": { + "put": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target sale's ", + "required": true + } + ], + "requestBody": { + "description": "New information of the sale", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Updated sale with new snapshot", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "summary": "Update a sale", + "description": "Update a sale.\n\nUpdate a {@link IShoppingSale sale} with new information.\n\nBy the way, the sale actually does not being modified, but just make a new\n{@link IShoppingSaleSnapshot snapshot} record of the sale. Its 1st purpose\nis to keeping the integrity of the sale, due to modification of the sale\nmust not affect to the {@link IShoppingOrder orders} that already had been\napplied to the sale.\n\nThe 2nd purpose is for the A/B tests. {@link IShoppingSeller Seller} needs\nto demonstrate operating performance by chaning price, content, and\ncomposition of the product. This snapshot concept would be helpful for it." + }, + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target sale's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed sale information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "summary": "Get a sale info", + "description": "Get a sale info.\n\nGet a {@link IShoppingSale sale} with detailed information.\n\nIf you're a {@link IShoppingSeller seller}, you can only access to the\nyour own {@link IShoppingSale sale}. Otherwise you're a\n{@link IShoppingCustomer customer}, you can access to only the operating\nsales in the market. You can't access to the unopened, closed, or suspended\nsales." + } + }, + "/shoppings/sellers/sales/{id}/open": { + "put": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target sale's ", + "required": true + } + ], + "requestBody": { + "description": "New opening and closing time", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IUpdateOpeningTime" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "" + } + }, + "summary": "Change opening and closing time of a sale", + "description": "Change opening and closing time of a sale.\n\nUpdate a {@link IShoppingSale sale}'s opening and closing time.\n\nBy the way, if the sale still be opened or closed, it is not possible to\nchange the opening time. In contrary, if the sale already had been opened\nbut still not closed, it is possible to change the closing time.\n\nOf course, if closing time is less than opening time or not,\n428 unprocessable entity error would be thrown." + } + }, + "/shoppings/sellers/sales/{id}/replica": { + "post": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target sale's ", + "required": true + } + ], + "responses": { + "201": { + "description": "Creation info of the sale for replication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.ICreate" + } + } + } + } + }, + "summary": "Get replica of a sale", + "description": "Get replica of a sale.\n\nGet a {@link IShoppingSale.ICreate } typed info of the target sale for\nreplication.\n\nIt would be useful for creating a new replication\n{@link IShoppingSale sale} with similar innformatiopn." + } + }, + "/shoppings/sellers/sales/{id}/pause": { + "delete": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target sale's ", + "required": true + } + ], + "responses": { + "200": { + "description": "" + } + }, + "summary": "Pause a sale", + "description": "Pause a sale.\n\nPause a {@link IShoppingSale sale} from {@link open opened} state.\nTherefore, the sale can not be operated again until it be\n{@link restore restored}. By the way, {@link IShoppingCustomer customer}\nstill can sale from the {@link index } and {@link at } API endpints, but\n\"paused\" label would be attached.\n\nAlso, customer no more can put into the shopping cart, either.\nEven the sale already had been put into the shopping cart, the\n{@link IShoppingCartCommodity commodity} will not be listed on the\nshopping cart. Also, it is not possible to appling an\n{@link IShoppingOrder order} with the paused sale's commodity, either.\n\nBy the way, if the sale already had been applied to an order, the order\ncan be {@link IShoppingOrderPublish published} and\n{@link IShoppingSeller seller} must {@link IShoppingDelivery deliver} the\ngood to the customer." + } + }, + "/shoppings/sellers/sales/{id}/suspend": { + "delete": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target sale's ", + "required": true + } + ], + "responses": { + "200": { + "description": "" + } + }, + "summary": "Suspend a sale", + "description": "Suspend a sale.\n\nSuspend a {@link IShoppingSale sale} from {@link open opened} state.\nTherefore, the sale can not be operated again until it be\n{@link restore restored} and {@link IShoppingCustomer customer} cannot\nsee the sale from the {@link index } and {@link at } API.\n\nAlso, customer no more can put into the shopping cart, either.\nEven the sale already had been put into the shopping cart, the\n{@link IShoppingCartCommodity commodity} will not be listed on the\nshopping cart. Also, it is not possible to appling an\n{@link IShoppingOrder order} with the suspended sale's commodity, either.\n\nBy the way, if the sale already had been applied to an order, the order\ncan be {@link IShoppingOrderPublish published} and\n{@link IShoppingSeller seller} must {@link IShoppingDelivery deliver} the\ngood to the customer." + } + }, + "/shoppings/sellers/sales/{id}/restore": { + "put": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target sale's ", + "required": true + } + ], + "responses": { + "200": { + "description": "" + } + }, + "description": "Restore a sale\n\nRestore a {@link IShoppingSale sale} from {@link pause paused} or\n{@link suspend suspended} state\n\nTherefore the sale can be operated again if its\n{@link IShoppingSale.closed_at closing time} has not been reached.\nAlso, if a {@link IShoppingCustomer customer} had put the sale into the\nshopping cart when being paused or suspended, the\n{@link IShoppingCartCommodity commodity} will be listed again on the\nshopping cart." + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{questionId}/answer": { + "post": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "questionId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target question's ", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + } + } + } + }, + "summary": "Write an answer article", + "description": "Write an answer article.\n\nWrite a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry question article} written by a\n{@link IShoppingCustomer }.\n\nNote that, this is the formal answer that can be written only one per\na question article (but {@link update updatable}). Therefore, it needs to\nguide the {@link IShoppingSeller seller} to write it carefully.\n\nAlso, as seller can write {@link IShoppingSaleInquiryComment comments} to\nthe question article as many as he/she wants, it would be useful for\nadditional communication." + }, + "put": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "questionId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target question's ", + "required": true + } + ], + "requestBody": { + "description": "Update info of the answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISnapshot" + } + } + } + } + }, + "summary": "Update an answer article", + "description": "Update an answer article.\n\nUpdate a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry question article} written by a\n{@link IShoppingCustomer }.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleInquiryAnswer.ISnapshot snapshot}. And this is made\npublic to everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated inquiry comments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + "post": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry's ", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments/{id}": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry comment's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed inquiry comment info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + "put": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry comment's ", + "required": true + } + ], + "requestBody": { + "description": "Update info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + } + }, + "/shoppings/sellers/sales/{saleId}/questions": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated questions with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.ISummary" + } + } + } + } + }, + "summary": "List up every summarized questions", + "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + } + }, + "/shoppings/sellers/sales/{saleId}/questions/abridges": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated questions with abridged information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.IAbridge" + } + } + } + } + }, + "summary": "List up every abridged questions", + "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at } function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{id}": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target question's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed question info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "summary": "Get a question info", + "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret }\nvalue is `false`." + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{reviewId}/answer": { + "post": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "reviewId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target review's ", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + } + } + } + }, + "summary": "Write an answer article", + "description": "Write an answer article.\n\nWrite a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry review article} written by a\n{@link IShoppingCustomer }.\n\nNote that, this is the formal answer that can be written only one per\na review article (but {@link update updatable}). Therefore, it needs to\nguide the {@link IShoppingSeller seller} to write it carefully.\n\nAlso, as seller can write {@link IShoppingSaleInquiryComment comments} to\nthe review article as many as he/she wants, it would be useful for\nadditional communication." + }, + "put": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "reviewId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target review's ", + "required": true + } + ], + "requestBody": { + "description": "Update info of the answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISnapshot" + } + } + } + } + }, + "summary": "Update an answer article", + "description": "Update an answer article.\n\nUpdate a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry review article} written by a\n{@link IShoppingCustomer }.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a review articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleInquiryAnswer.ISnapshot snapshot}. And this is made\npublic to everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated inquiry comments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + }, + "post": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry's ", + "required": true + } + ], + "requestBody": { + "description": "Creation info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry comment's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed inquiry comment info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + }, + "put": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged inquiry's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target inquiry comment's ", + "required": true + } + ], + "requestBody": { + "description": "Update info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + } + }, + "/shoppings/sellers/sales/{saleId}/reviews": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated reviews with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.ISummary" + } + } + } + } + }, + "summary": "List up every summarized reviews", + "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/abridges": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated reviews with abridged information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.IAbridge" + } + } + } + } + }, + "summary": "List up every abridged reviews", + "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at } function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{id}": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target review's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed review info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "summary": "Get a review info", + "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales." + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots/{id}/replica": { + "post": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target snapshot's ", + "required": true + } + ], + "responses": { + "201": { + "description": "Creation info of the sale for replication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.ICreate" + } + } + } + } + }, + "summary": "Get replica of a snapshot", + "description": "Get replica of a snapshot.\n\nGet a {@link IShoppingSale.ICreate } typed info of the target\n{@link IShoppingSaleSnapshot snapshot} record for replication.\n\nIt would be useful for creating a new replication {@link IShoppingSale sale}\nfrom the old snapshot." + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target sale's ", + "required": true + } + ], + "requestBody": { + "description": "Requestion info of pagination", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated snapshots with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleSnapshot.ISummary" + } + } + } + } + }, + "summary": "List up every snapshots", + "description": "List up every snapshots.\n\nWhenever {@link IShoppingSeller seller} updates a\n{@link IShoppingSale sale}, the sale record is not updated but a new\n{@link IShoppingSaleSnapshot snapshot} record is created to keep the\nintegrity of the sale history. This API function is for listing up\nsuch snapshot records.\n\nAlso, as you can see from the return type, returned snapshots are\nsummarized, not detailed. If you want to get the detailed information\nof a snapshot, use {@link at } or {@link flipo } function for each snapshot.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots/{id}": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target snapshot's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed information of the snapshot", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot" + } + } + } + } + }, + "summary": "Get a snapshot info", + "description": "Get a snapshot info.\n\nGet a {@link IShoppingSaleSnapshot snapshot} with detailed information.\n\nAs you can see from the return type, returned snapshot does not contain\nthe {@link IShoppingSale sale} info. If you want to get the sale info,\nuse the {@link flip } function instead.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots/{id}/flip": { + "get": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target snapshot's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed sale information in the snapshot side", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "summary": "Get a flipped snapshot info", + "description": "Get a flipped snapshot info.\n\nGet a {@link IShoppingSale sale} info of a flipped snapshot.\n\nAs you can see from the return type, this function returns the\n{@link IShoppingSale sale} info. By the way, the sale info is not the\nlatest one, but a flipped info in the snapshot side.\n\nAlso, if you're a {@link IShoppingSeller seller}, you can only access to\nthe your own {@link IShoppingSale sale}'s snapshots. Otherwise, you can\naccess to every snapshots of the sales even though the sale has been\nclosed or suspended." + } + }, + "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements": { + "patch": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged unit's ", + "required": true + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target stock's ", + "required": true + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated supplements", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleUnitStockSupplement" + } + } + } + } + }, + "summary": "List up every supplements", + "description": "List up every supplements.\n\nList up every {@link IShoppingSaleUnitStockSupplement supplement histories}\nof a specific {@link IShoppingSaleUnitStock stock}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleUnitStockSupplement.IRequest.search search condition} in\nthe request body. Also, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingSaleUnitStockSupplement.IRequest.sort }\nproperty." + }, + "post": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged unit's ", + "required": true + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target stock's ", + "required": true + } + ], + "requestBody": { + "description": "Ceate info of the supplement", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Created supplement", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement" + } + } + } + } + }, + "summary": "Create a supplement", + "description": "Create a supplement.\n\nCreate a {@link IShoppingSaleUnitStockSupplement supplement history} of a\nspecific {@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be increased by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}." + } + }, + "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements/{id}": { + "put": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged unit's ", + "required": true + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target stock's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target supplement's ", + "required": true + } + ], + "requestBody": { + "description": "Update info (quantity) of the supplement", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "" + } + }, + "summary": "Update a supplement", + "description": "Update a supplement.\n\nUpdate quantity value of a {@link IShoppingSaleUnitStockSupplement supplement}\nof a specific {@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be changed by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}." + }, + "delete": { + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged sale's ", + "required": true + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Belonged unit's ", + "required": true + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target stock's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target supplement's ", + "required": true + } + ], + "responses": { + "200": { + "description": "" + } + }, + "summary": "Erase a supplement", + "description": "Erase a supplement.\n\nErase a {@link IShoppingSaleUnitStockSupplement supplement} of a specific\n{@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be decreased by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}." + } + }, + "/shoppings/sellers/systematic/channels/{channelCode}/categories": { + "patch": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Belonged channel's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Paginated categories with children categories", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + } + } + } + } + } + }, + "summary": "List up every categories with children records", + "description": "List up every categories with children records.\n\nList up every {@link IShoppingChannelCategory.IHierarchical categories}\nof a {@link IShoppingChannel channel} with pagination. Returned categories\ncontain children categories, too.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannelCategory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingChannelCategory.IRequest.sort sort condition}." + } + }, + "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}": { + "get": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Belonged channel's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target category's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed category info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "summary": "Get a category info", + "description": "Get a category info.\n\nGet a detailed {@link IShoppingChannelCategory category} information.\n\nReturned category contains hierarchical children categories, and also\ncontains the recursive parent categories, too." + } + }, + "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}/invert": { + "get": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Belonged channel's ", + "required": true + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target category's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed category info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + } + } + } + }, + "summary": "Get a category info of inverted", + "description": "Get a category info of inverted.\n\nGet a inverted {@link IShoppingChannelCategory.IInvert category} information.\n\nReturned category contains the recursive parent categories, but not contains\nthe hierarchical children categories." + } + }, + "/shoppings/sellers/systematic/channels": { + "patch": { + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated channels", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel" + } + } + } + } + }, + "summary": "List up every channels", + "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + } + }, + "/shoppings/sellers/systematic/channels/hierarchical": { + "patch": { + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated channels with nested categories", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel.IHierarchical" + } + } + } + } + }, + "summary": "List up every channels with nested categories", + "description": "List up every channels with nested categories.\n\nList up every {@link IShoppingChannel.IHierarchical channels} with\n{@link IPage pagination}. Returned channels contain nested hierarchical\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + } + }, + "/shoppings/sellers/systematic/channels/{id}": { + "get": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target channel's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed channel info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "summary": "Get a channel info", + "description": "Get a channel info.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + } + }, + "/shoppings/sellers/systematic/channels/{code}/get": { + "get": { + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Target channel's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed channel info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "summary": "Get a channel info by its code", + "description": "Get a channel info by its code.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information\nby its code.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + } + }, + "/shoppings/sellers/systematic/sections": { + "patch": { + "tags": [ + "Section" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated sections", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSection" + } + } + } + } + }, + "summary": "List up every sections", + "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}." + } + }, + "/shoppings/sellers/systematic/sections/{id}": { + "get": { + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "description": "Target section's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed section info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "summary": "Get a section info", + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." + } + }, + "/shoppings/sellers/systematic/sections/{code}/get": { + "get": { + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "description": "Target section's ", + "required": true + } + ], + "responses": { + "200": { + "description": "Detailed section info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "summary": "Get a section info by its code", + "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code." + } + } + }, + "components": { + "schemas": { + "IPerformance": { + "type": "object", + "properties": { + "cpu": { + "$ref": "#/components/schemas/process.global.NodeJS.CpuUsage" + }, + "memory": { + "$ref": "#/components/schemas/process.global.NodeJS.MemoryUsage" + }, + "resource": { + "$ref": "#/components/schemas/process.global.NodeJS.ResourceUsage" + } + }, + "required": [ + "cpu", + "memory", + "resource" + ] + }, + "process.global.NodeJS.CpuUsage": { + "type": "object", + "properties": { + "user": { + "type": "number" + }, + "system": { + "type": "number" + } + }, + "required": [ + "user", + "system" + ] + }, + "process.global.NodeJS.MemoryUsage": { + "type": "object", + "properties": { + "rss": { + "type": "number" + }, + "heapTotal": { + "type": "number" + }, + "heapUsed": { + "type": "number" + }, + "external": { + "type": "number" + }, + "arrayBuffers": { + "type": "number" + } + }, + "required": [ + "rss", + "heapTotal", + "heapUsed", + "external", + "arrayBuffers" + ] + }, + "process.global.NodeJS.ResourceUsage": { + "type": "object", + "properties": { + "fsRead": { + "type": "number" + }, + "fsWrite": { + "type": "number" + }, + "involuntaryContextSwitches": { + "type": "number" + }, + "ipcReceived": { + "type": "number" + }, + "ipcSent": { + "type": "number" + }, + "majorPageFault": { + "type": "number" + }, + "maxRSS": { + "type": "number" + }, + "minorPageFault": { + "type": "number" + }, + "sharedMemorySize": { + "type": "number" + }, + "signalsCount": { + "type": "number" + }, + "swappedOut": { + "type": "number" + }, + "systemCPUTime": { + "type": "number" + }, + "unsharedDataSize": { + "type": "number" + }, + "unsharedStackSize": { + "type": "number" + }, + "userCPUTime": { + "type": "number" + }, + "voluntaryContextSwitches": { + "type": "number" + } + }, + "required": [ + "fsRead", + "fsWrite", + "involuntaryContextSwitches", + "ipcReceived", + "ipcSent", + "majorPageFault", + "maxRSS", + "minorPageFault", + "sharedMemorySize", + "signalsCount", + "swappedOut", + "systemCPUTime", + "unsharedDataSize", + "unsharedStackSize", + "userCPUTime", + "voluntaryContextSwitches" + ] + }, + "ISystem": { + "type": "object", + "properties": { + "uid": { + "type": "number", + "title": "Random Unique ID", + "description": "Random Unique ID." + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "`process.argv`" + }, + "commit": { + "$ref": "#/components/schemas/ISystem.ICommit", + "title": "Git commit info", + "description": "Git commit info." + }, + "package": { + "$ref": "#/components/schemas/ISystem.IPackage", + "description": "`package.json`" + }, + "created_at": { + "type": "string", + "title": "Creation time of this server", + "description": "Creation time of this server." + } + }, + "required": [ + "uid", + "arguments", + "commit", + "package", + "created_at" + ], + "description": "System Information." + }, + "ISystem.ICommit": { + "type": "object", + "properties": { + "shortHash": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "hash": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "sanitizedSubject": { + "type": "string" + }, + "body": { + "type": "string" + }, + "author": { + "$ref": "#/components/schemas/ISystem.ICommit.IUser" + }, + "committer": { + "$ref": "#/components/schemas/ISystem.ICommit.IUser" + }, + "authored_at": { + "type": "string" + }, + "commited_at": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shortHash", + "branch", + "hash", + "subject", + "sanitizedSubject", + "body", + "author", + "committer", + "authored_at", + "commited_at", + "tags" + ], + "description": "Git commit info." + }, + "ISystem.ICommit.IUser": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "description": "Git user account info." + }, + "ISystem.IPackage": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "description": { + "type": "string" + }, + "main": { + "type": "string" + }, + "typings": { + "type": "string" + }, + "scripts": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "repository": { + "type": "object", + "properties": { + "type": { + "const": "git" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ] + }, + "author": { + "type": "string" + }, + "license": { + "type": "string" + }, + "bugs": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + }, + "required": [ + "url" + ] + }, + "homepage": { + "type": "string" + }, + "devDependencies": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "dependencies": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "publishConfig": { + "type": "object", + "properties": { + "registry": { + "type": "string" + } + }, + "required": [ + "registry" + ] + }, + "files": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "version", + "description", + "scripts", + "repository", + "author", + "license", + "bugs", + "homepage", + "dependencies" + ], + "description": "NPM package info." + }, + "Recordstringstring": { + "type": "object", + "properties": {}, + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } + }, + "IShoppingAdministrator.IInvert": { + "type": "object", + "properties": { + "type": { + "const": "administrator", + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "$ref": "#/components/schemas/IShoppingMember.IInvert", + "title": "Membership joining information", + "description": "Membership joining information." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer.IInvert", + "title": "Customer, the connection information", + "description": "Customer, the connection information." + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen", + "title": "Real-name and mobile number authentication information", + "description": "Real-name and mobile number authentication information." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "IShoppingMember.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMemberEmail" + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "IShoppingMemberEmail": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "IShoppingCustomer.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "Belonged channel", + "description": "Belonged channel." + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser" + } + ], + "title": "External user information", + "description": "External user information.\n\nWhen the customer has come frome an external service." + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + }, + "IShoppingChannel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "IShoppingExternalUser": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "Citizen activation info", + "description": "Citizen activation info." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "application", + "uid", + "nickname", + "data" + ], + "description": "External user information.\n\n`IShoppingExternalUser` is an entity dsigned for when this system needs\nto connect with external services and welcome their users as\n{@link IShoppingCustomer customers} of this service.\n\nFor reference, customers who connect from an external service must have\nthis record, and the external service user is identified through the two\nattributes {@link application } and {@link uid }. If a customer connected\nfrom an external service completes\n{@link IShoppingCitizen real-name authentication} from this service, each\ntime the external service user reconnects to this service and issues a\nnew customer authentication token, real-name authentication begins with\ncompleted.\n\nAnd {@link password } is the password issued to the user by the external\nservice system (the so-called permanent user authentication token), and\nis never the actual user password. However, for customers who entered the\nsame application and uid as the current external system user, this is to\ndetermine whether to view this as a correct external system user or a\nviolation.\n\nIn addition, additional information received from external services can\nbe recorded in the data field in JSON format." + }, + "IShoppingCitizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + }, + "IShoppingAdministrator.IJoin": { + "type": "object", + "properties": {}, + "description": "Joining request info." + }, + "IShoppingMember.ILogin": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "title": "Email address of member", + "description": "Email address of member.\n\nIf the member has multiple email addresses, just use one of them." + }, + "password": { + "type": "string", + "title": "Password of the member account", + "description": "Password of the member account." + } + }, + "required": [ + "email", + "password" + ], + "description": "Login request info." + }, + "IShoppingCoupon.ICreate": { + "type": "object", + "properties": { + "discount": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponDiscount.IAmount" + }, + { + "$ref": "#/components/schemas/IShoppingCouponDiscount.IPercent" + } + ], + "title": "Discount information", + "description": "Discount information." + }, + "restriction": { + "$ref": "#/components/schemas/IShoppingCouponRestriction", + "title": "Restriction information", + "description": "Restriction information." + }, + "criterias": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSectionCriteria.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSellerCriteria.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSaleCriteria.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.ICreate" + } + ] + } + }, + "disposable_codes": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string", + "title": "Representative name of the coupon", + "description": "Representative name of the coupon." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Opening time of the coupon", + "description": "Opening time of the coupon." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Closing time of the coupon", + "description": "Closing time of the coupon.\n\nTickets cannot be issued after this time.\n\nHowever, previously issued tickets can still be used until their\nexpiration date." + } + }, + "required": [ + "discount", + "restriction", + "criterias", + "disposable_codes", + "name", + "opened_at", + "closed_at" + ], + "description": "Creation information of the coupon." + }, + "IShoppingCouponDiscount.IAmount": { + "type": "object", + "properties": { + "unit": { + "const": "amount", + "title": "Discount unit as amount", + "description": "Discount unit as amount.\n\nIt means the order price would be discounted by the amount value." + }, + "value": { + "type": "number", + "title": "Discount value as amount", + "description": "Discount value as amount." + }, + "threshold": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ], + "title": "Minimum purchase amount for discount", + "description": "Minimum purchase amount for discount.\n\nWhen setting this value, discount coupons cannot be applied to\norder totals that are less than this value." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "exclusiveMinimum": true, + "minimum": 0 + } + ], + "title": "Maximum amount available for discount", + "description": "Maximum amount available for discount.\n\nWhen this value is set, no further discount will be given no\nmatter how much you order. This property would be meaningful\nonly when the {@link multiplicative } is `true`." + }, + "multiplicative": { + "type": "boolean", + "title": "Multiplicative or not", + "description": "Multiplicative or not.\n\nIf this property is `true`, the discount value would be multiplied\nto the {@link IShoppingCartCommodity.volume } or\n{@link IShoppingOrderGood.volume } value. Also, in that case,\nthe {@link limit } property would be meaningful." + } + }, + "required": [ + "unit", + "value", + "threshold", + "limit", + "multiplicative" + ], + "description": "Discount information with amount unit." + }, + "IShoppingCouponDiscount.IPercent": { + "type": "object", + "properties": { + "unit": { + "const": "percent", + "title": "Discount unit as percent", + "description": "Discount unit as percent.\n\nIt means the order price would be discounted by the percent value." + }, + "value": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Discount value as percent", + "description": "Discount value as percent." + }, + "threshold": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ], + "title": "Minimum purchase amount for discount", + "description": "Minimum purchase amount for discount.\n\nWhen setting this value, discount coupons cannot be applied to\norder totals that are less than this value." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "exclusiveMinimum": true, + "minimum": 0 + } + ], + "title": "Maximum amount available for discount", + "description": "Maximum amount available for discount.\n\nWhen this value is set, no further discount will be given no\nmatter how much you order." + } + }, + "required": [ + "unit", + "value", + "threshold", + "limit" + ], + "description": "Discount information with percent unit." + }, + "IShoppingCouponRestriction": { + "type": "object", + "properties": { + "access": { + "oneOf": [ + { + "const": "public" + }, + { + "const": "private" + } + ], + "title": "Access level of coupon", + "description": "Access level of coupon.\n\n- public: possible to find from public API\n- private: unable to find from public API\n - arbitrarily assigned by the seller or administrator\n - issued from one-time link" + }, + "exclusive": { + "type": "boolean", + "title": "Exclusivity or not", + "description": "Exclusivity or not.\n\nAn exclusive discount coupon refers to a discount coupon that has an\nexclusive relationship with other discount coupons and can only be\nused alone. That is, when an exclusive discount coupon is used, no\nother discount coupon can be used for the same\n{@link IShoppingOrder order} or {@link IShoppingOrderGood good}.\n\nPlease note that this exclusive attribute is a very different concept\nfrom multiplicative, which means whether the same coupon can be\nmultiplied and applied to multiple coupons of the same order, so\nplease do not confuse them." + }, + "volume": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limited quantity issued", + "description": "Limited quantity issued.\n\nIf there is a limit to the quantity issued, it becomes impossible to issue tickets exceeding this value.\n\nIn other words, the concept of N coupons being issued on a first-come, first-served basis is created." + }, + "volume_per_citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limited quantity issued per person", + "description": "Limited quantity issued per person.\n\nAs a limit to the total amount of issuance per person, it is common to assign 1 to limit duplicate issuance to the same citizen, or to use the NULL value to set no limit.\n\nOf course, by assigning a value of N, the total amount issued to the same citizen can be limited." + }, + "expired_in": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Expiration day(s) value", + "description": "Expiration day(s) value.\n\nThe concept of expiring N days after a discount coupon ticket is issued.\n\nTherefore, customers must use the ticket within N days, if possible, from the time it is issued." + }, + "expired_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Expiration date", + "description": "Expiration date.\n\nA concept that expires after YYYY-MM-DD after a discount coupon ticket is issued.\n\nDouble restrictions are possible with expired_in, of which the one with the shorter expiration date is used." + } + }, + "required": [ + "access", + "exclusive", + "volume", + "volume_per_citizen", + "expired_in", + "expired_at" + ], + "description": "Restriction information of the coupon." + }, + "IShoppingCouponChannelCriteria.ICreate": { + "type": "object", + "properties": { + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo.ICreate" + }, + "minItems": 1, + "title": "List of target channels and categories", + "description": "List of target channels and categories." + }, + "type": { + "const": "channel" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "channels", + "type", + "direction" + ], + "description": "Creation information of the channel criteria." + }, + "IShoppingCouponChannelCriteria.IChannelTo.ICreate": { + "type": "object", + "properties": { + "channel_code": { + "type": "string", + "title": "Target channel's {@link IShoppingChannel.code }", + "description": "Target channel's {@link IShoppingChannel.code }." + }, + "category_ids": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + ], + "title": "Target categories' {@link IShoppingChannelCategory.id }s", + "description": "Target categories' {@link IShoppingChannelCategory.id }s." + } + }, + "required": [ + "channel_code", + "category_ids" + ], + "description": "Target channel and categories." + }, + "IShoppingCouponSectionCriteria.ICreate": { + "type": "object", + "properties": { + "section_codes": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "title": "List of target section's {@link IShoppingSection.code }s", + "description": "List of target section's {@link IShoppingSection.code }s." + }, + "type": { + "const": "section" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "section_codes", + "type", + "direction" + ], + "description": "Creation information of the section criteria." + }, + "IShoppingCouponSellerCriteria.ICreate": { + "type": "object", + "properties": { + "seller_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "minItems": 1, + "title": "List of target seller's {@link IShoppingSeller.id }s", + "description": "List of target seller's {@link IShoppingSeller.id }s." + }, + "type": { + "const": "seller" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "seller_ids", + "type", + "direction" + ], + "description": "Creation information of the seller criteria." + }, + "IShoppingCouponSaleCriteria.ICreate": { + "type": "object", + "properties": { + "sale_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "minItems": 1, + "title": "List of target sale's {@link IShoppingSale.id }s", + "description": "List of target sale's {@link IShoppingSale.id }s." + }, + "type": { + "const": "sale" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "sale_ids", + "type", + "direction" + ], + "description": "Creation information of the sale criteria." + }, + "IShoppingCouponFunnelCriteria.ICreate": { + "type": "object", + "properties": { + "funnels": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IValueFunnel" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IVariableFunnel" + } + ] + }, + "minItems": 1, + "title": "List of target funnels", + "description": "List of target funnels." + }, + "type": { + "const": "funnel" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "funnels", + "type", + "direction" + ], + "description": "Creation information of the funnel criteria." + }, + "IShoppingCouponFunnelCriteria.IValueFunnel": { + "type": "object", + "properties": { + "kind": { + "oneOf": [ + { + "const": "url" + }, + { + "const": "referrer" + } + ], + "title": "Kind of funnel restriction", + "description": "Kind of funnel restriction." + }, + "value": { + "type": "string", + "title": "Target value", + "description": "Target value." + } + }, + "required": [ + "kind", + "value" + ], + "description": "Kind of funnel restriction by a value." + }, + "IShoppingCouponFunnelCriteria.IVariableFunnel": { + "type": "object", + "properties": { + "kind": { + "const": "variable", + "title": "Kind of funnel restriction", + "description": "Kind of funnel restriction." + }, + "key": { + "type": "string", + "title": "Target variable's key", + "description": "Target variable's key." + }, + "value": { + "type": "string", + "title": "Target variable's value", + "description": "Target variable's value." + } + }, + "required": [ + "kind", + "key", + "value" + ], + "description": "Kind of funnel restriction by a variable." + }, + "IShoppingCoupon": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "designer": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSeller" + }, + { + "$ref": "#/components/schemas/IShoppingAdministrator" + } + ], + "title": "Designer who've made the coupon", + "description": "Designer who've made the coupon." + }, + "inventory": { + "$ref": "#/components/schemas/IShoppingCouponInventory", + "title": "Inventory information", + "description": "Inventory information." + }, + "criterias": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponCriteria" + }, + "title": "List of criteria informations", + "description": "List of criteria informations." + }, + "discount": { + "$ref": "#/components/schemas/IShoppingCouponDiscount", + "title": "Discount information", + "description": "Discount information." + }, + "restriction": { + "$ref": "#/components/schemas/IShoppingCouponRestriction", + "title": "Restriction information", + "description": "Restriction information." + }, + "name": { + "type": "string", + "title": "Representative name of the coupon", + "description": "Representative name of the coupon." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Opening time of the coupon", + "description": "Opening time of the coupon." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Closing time of the coupon", + "description": "Closing time of the coupon.\n\nTickets cannot be issued after this time.\n\nHowever, previously issued tickets can still be used until their\nexpiration date." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tie of the record", + "description": "Creation tie of the record." + } + }, + "required": [ + "id", + "designer", + "inventory", + "criterias", + "discount", + "restriction", + "name", + "opened_at", + "closed_at", + "created_at" + ], + "description": "Discount coupon.\n\n`IShoppingCoupon` is an entity that symbolizes discount coupons at\na shopping mall.\n\nNote that, `IShoppingCoupon` only contains specification information\nabout discount coupons. Please keep in mind that this is a different\nconcept from {@link IShoppingCouponTicket }, which refers to the issuance\nof a discount coupon, or {@link IShoppingCouponTicketPayment }, which\nrefers to its payment.\n\nAdditionally, discount coupons are applied on an order-by-order basis,\nbut each has its own unique restrictions. For example, a coupon with\n{@link IShoppingCouponSellerCriteria } may or may not be used only for\n{@link IShoppingSale } of listings registered by the {@link IShoppingSeller }.\nAlso, there are restrictions such as\n{@link IShoppingCouponDiscount.threshold minimum amount restrictions} for\nusing discount coupons and\n{@link IShoppingCouponDiscount.limit maximum discount amount limits}.\n\nIn addition, you can set whether to issue discount coupons publicly or\ngive them only to people who know the specific issuing code. In addition,\nthere are restrictions such as issued discount coupons having an\n{@link IShoppingCouponRestriction.expired_at expiration date} or being\nissued only to customers who came in through a\n{@link IShoppingCouponFunnelCriteria specific funnel}.\n\nFor more information, please refer to the properties below and the\nsubsidiary entities described later." + }, + "IShoppingSeller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "IShoppingAdministrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator account.\n\n`IShoppingAdministrator` is an entity that embodies a person who manages\nthe shopping mall system, with {@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can participate\neven without membership joining, administrator must join membership to operate\nmanagements. Also, administrator must perform the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "IShoppingCouponInventory": { + "type": "object", + "properties": { + "volume": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Remaining volume for everyone", + "description": "Remaining volume for everyone.\n\nIf there is a limit to the quantity issued, it becomes impossible to\nissue tickets exceeding this value.\n\nIn other words, the concept of N coupons being issued on a first-come,\nfirst-served basis is created." + }, + "volume_per_citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Remaining volume per citizen", + "description": "Remaining volume per citizen.\n\nAs a limit to the total amount of issuance per person, it is common to\nassign 1 to limit duplicate issuance to the same citizen, or to use the\n`nul`` value to set no limit.\n\nOf course, by assigning a value of N, the total amount issued to the\nsame citizen can be limited." + } + }, + "required": [ + "volume", + "volume_per_citizen" + ], + "description": "Inventory information of the coupon.\n\nIf a {@link IShoppingCoupon coupon} has been designed with limited\ninventory, this `IShoppingCouponInventory` structure represents the\nremaining inventory information." + }, + "IShoppingCouponCriteria": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSectionCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSellerCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSaleCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria" + } + ], + "description": "Union type of the criteria.\n\n`IShoppingCouponCriteria` is an union typed structure that embodies the\nconditions for applying a {@link IShoppingCoupon discount coupon}. All\nof individual entities are imposing constraints on the reference unit of\na discount coupon were created by inheritig\n{@link IShoppingCouponCriteriaBase } type.\n\nAlso, individual entities can be specified by using the if condition on\nthe {@link type } property. For example, if the {@link type } value is\n`section`, {@link IShoppingCouponSectionCriteria } type would be specified,\nso that you can access to the target\n{@link IShoppingCouponSectionCriteria.section } directly. For reference,\nthis concept is called a descriminated union in TypeScript.\n\n```typescript\nconst union: IShoppingCouponCriteria;\nif (union.type === \"section\")\n union.section; // IShoppingCouponSectionCriteria.section\n```\n\nIn addition, constraints on reference units can be specified through the\n{@link direction } property to proceed as an inclusion condition or,\nconversely, as an exclusion condition. If the direction value is \"include\",\nthe coupon is applicable only to the reference object. Conversely, if the\ndirection value is \"exclude\", it is a coupon that cannot be applied to the\nreference object." + }, + "IShoppingCouponChannelCriteria": { + "type": "object", + "properties": { + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo" + }, + "minItems": 1, + "title": "List of target channels and categories", + "description": "List of target channels and categories." + }, + "type": { + "const": "channel", + "title": "Descrimanator type", + "description": "Descrimanator type." + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "Direction of the criteria", + "description": "Direction of the criteria." + } + }, + "required": [ + "channels", + "type", + "direction" + ], + "description": "Conditions for channels of discount coupons.\n\n`ishoppingcouponchannelcriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase } and is used when setting conditions on\na specific {@link IShoppingChannel channel} or\n{@link IShoppingChannelCategory category} of that channel.\n\nIf the {@link direction } value is \"include\", the coupon can only be used\nfor the target channels (or categories). Conversely, if it is \"exclude\",\nit is a coupon that cannot be used." + }, + "IShoppingCouponChannelCriteria.IChannelTo": { + "type": "object", + "properties": { + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "Target channel", + "description": "Target channel." + }, + "categories": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + }, + "minItems": 1 + } + ], + "title": "List of target categories", + "description": "List of target categories." + } + }, + "required": [ + "channel", + "categories" + ] + }, + "IShoppingChannelCategory.IInvert": { + "type": "object", + "properties": { + "parent": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + ], + "title": "Parent category info with recursive structure", + "description": "Parent category info with recursive structure.\n\nIf no parent exists, then be `null`." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "Parent category's ID", + "description": "Parent category's ID." + }, + "name": { + "type": "string", + "title": "Representative name of the category", + "description": "Representative name of the category.\n\nThe name must be unique within the parent category. If no parent exists,\nthen the name must be unique within the channel between no parent\ncategories." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "parent", + "id", + "parent_id", + "name", + "created_at" + ], + "description": "Invert category information with parent category." + }, + "IShoppingCouponSectionCriteria": { + "type": "object", + "properties": { + "sections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSection" + }, + "minItems": 1, + "title": "Target sections to include or exclude", + "description": "Target sections to include or exclude." + }, + "type": { + "const": "section", + "title": "Descrimanator type", + "description": "Descrimanator type." + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "Direction of the criteria", + "description": "Direction of the criteria." + } + }, + "required": [ + "sections", + "type", + "direction" + ], + "description": "Conditions for sections of discount coupons.\n\n`IShoppingCouponSectionCriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase } and is used when setting conditions\nfor a specific {@link IShoppingSection section}.\n\nIf the {@link direction } value is \"include\", the coupon can only be used\nfor the target {@link sections }. Conversely, if it is \"exclude\", the\ncoupon cannot be used." + }, + "IShoppingSection": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." + }, + "IShoppingCouponSellerCriteria": { + "type": "object", + "properties": { + "sellers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSeller" + }, + "minItems": 1, + "title": "Target sellers to include or exclude", + "description": "Target sellers to include or exclude." + }, + "type": { + "const": "seller", + "title": "Descrimanator type", + "description": "Descrimanator type." + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "Direction of the criteria", + "description": "Direction of the criteria." + } + }, + "required": [ + "sellers", + "type", + "direction" + ], + "description": "Conditions for sellers of discount coupons.\n\n`IShoppingCouponSellerCriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase } and is used when setting conditions\nfor a specific {@link IShoppingSeller seller}.\n\nIf the {@link direction } value is \"include\", the coupon can only be used\nfor the target {@link sellers }. Conversely, if it is \"exclude\", the\ncoupon cannot be used." + }, + "IShoppingCouponSaleCriteria": { + "type": "object", + "properties": { + "sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSale.ISummary" + }, + "minItems": 1, + "title": "Target sales to include or exclude", + "description": "Target sales to include or exclude." + }, + "type": { + "const": "sale", + "title": "Descrimanator type", + "description": "Descrimanator type." + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "Direction of the criteria", + "description": "Direction of the criteria." + } + }, + "required": [ + "sales", + "type", + "direction" + ], + "description": "Conditions for sales of discount coupons.\n\n`IShoppingCouponSaleCriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase } and is used when setting conditions\nfor a specific {@link IShoppingSale sale}.\n\nIf the {@link direction } value is \"include\", the coupon can only be used\nfor the target {@link sales }. Conversely, if it is \"exclude\", the\ncoupon cannot be used." + }, + "IShoppingSale.ISummary": { + "type": "object", + "properties": { + "section": { + "$ref": "#/components/schemas/IShoppingSection", + "title": "Belonged section", + "description": "Belonged section." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert", + "title": "Seller who has registered the sale", + "description": "Seller who has registered the sale." + }, + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange", + "title": "Price range of the unit", + "description": "Price range of the unit." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key of Sale", + "description": "Primary Key of Sale." + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "Primary Key of Snapshot", + "description": "Primary Key of Snapshot." + }, + "latest": { + "type": "boolean", + "title": "Whether the snapshot is the latest one or not", + "description": "Whether the snapshot is the latest one or not." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", + "title": "Description and image content describing the sale", + "description": "Description and image content describing the sale." + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "List of channels and categories", + "description": "List of channels and categories.\n\nWhich channels and categories the sale is registered to." + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "List of search tags", + "description": "List of search tags." + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ISummary" + }, + "minItems": 1, + "title": "List of units", + "description": "List of units.\n\nRecords about individual product composition informations that are sold\nin the sale. Each {@link IShoppingSaleUnit unit} record has configurable\n{@link IShoppingSaleUnitOption options},\n{@link IShoppingSaleUnitOptionCandidate candidate} values for each\noption, and {@link IShoppingSaleUnitStock final stocks} determined by\nselecting every candidate values of each option." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record.\n\nNote that, this property is different with {@link opened_at },\nwhich means the timepoint of the sale is opened." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Last updated time of the record", + "description": "Last updated time of the record.\n\nIn another words, creation time of the last snapshot." + }, + "paused_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Paused time of the sale", + "description": "Paused time of the sale.\n\nThe sale is paused by the seller, for some reason.\n\n{@link IShoppingCustomer Customers} can still see the sale on the\nboth list and detail pages, but the sale has a warning label\n\"The sale is paused by the seller\"." + }, + "suspended_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Suspended time of the sale", + "description": "Suspended time of the sale.\n\nThe sale is suspended by the seller, for some reason.\n\n{@link IShoppingCustomer Customers} cannot see the sale on the\nboth list and detail pages. It is almost same with soft delettion,\nbut there's a little bit difference that the owner\n{@link IShoppingSeller seller} can still see the sale and resume it.\n\nOf course, the {@link IShoppingCustomer customers} who have\nalready purchased the sale can still see the sale on the\n{@link IShoppingOrder order} page." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Closing time of the sale", + "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." + } + }, + "required": [ + "section", + "seller", + "price_range", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "opened_at", + "closed_at" + ], + "description": "Summarized information of sale.\n\nThis summarized information being used for pagination." + }, + "IShoppingSeller.IInvert": { + "type": "object", + "properties": { + "type": { + "const": "seller", + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "$ref": "#/components/schemas/IShoppingMember.IInvert", + "title": "Membership joining information", + "description": "Membership joining information." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer.IInvert", + "title": "Customer, the connection information", + "description": "Customer, the connection information." + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen", + "title": "Real-name and mobile number authentication information", + "description": "Real-name and mobile number authentication information." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + }, + "IShoppingSalePriceRange": { + "type": "object", + "properties": { + "lowest": { + "$ref": "#/components/schemas/IShoppingPrice" + }, + "highest": { + "$ref": "#/components/schemas/IShoppingPrice" + } + }, + "required": [ + "lowest", + "highest" + ] + }, + "IShoppingPrice": { + "type": "object", + "properties": { + "nominal": { + "type": "number", + "minimum": 0, + "title": "Nominal price", + "description": "Nominal price.\n\nThis is not {@link real real price} to pay, but just a nominal price to show.\nIf this value is greater than the {@link real real price}, it would be shown\nlike {@link IShoppingSeller seller} is giving a discount." + }, + "real": { + "type": "number", + "minimum": 0, + "title": "Real price to pay", + "description": "Real price to pay." + } + }, + "required": [ + "nominal", + "real" + ], + "description": "Shopping price interface." + }, + "IShoppingSaleContent.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + } + } + }, + "required": [ + "id", + "title", + "thumbnails" + ] + }, + "IAttachmentFile": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of attachment file", + "description": "Creation time of attachment file." + }, + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "minLength": 1, + "maxLength": 8 + } + ], + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "id", + "created_at", + "name", + "extension", + "url" + ], + "description": "Attachment File.\n\nEvery attachment files that are managed in current system.\n\nFor reference, it is possible to omit one of file {@link name }\nor {@link extension } like `.gitignore` or `README` case, but not\npossible to omit both of them." + }, + "IShoppingSaleChannel": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + }, + "title": "List of categories of the channel listing the sale", + "description": "List of categories of the channel listing the sale.\n\nIf empty, it means all categories of the channel is listing the sale." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "categories", + "id", + "created_at", + "code", + "name" + ], + "description": "Target channel (and categories) of sale to sell.\n\n`IShoppingSaleChannel` is an entity that expresses through which\n{@link IShoppingChannel channel} a listing {@link IShoppingSale } is sold.\n\nAlso, if {@link IShoppingChannelCategory categories} are specified, it also\nmeans that the sale be sold. Otherwise, none of the categories of the channel\nbeing specified, it means that every categories of the channel is listing the\ntarget sale." + }, + "IShoppingSaleUnit.ISummary": { + "type": "object", + "properties": { + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "name": { + "type": "string", + "title": "Representative name of the unit", + "description": "Representative name of the unit." + }, + "primary": { + "type": "boolean", + "title": "Whether the unit is primary or not", + "description": "Whether the unit is primary or not.\n\nJust a labeling value." + }, + "required": { + "type": "boolean", + "title": "Whether the unit is required or not", + "description": "Whether the unit is required or not.\n\nWhen the unit is required, the customer must select the unit. If do not\nselect, customer can't buy it.\n\nFor example, if there's a sale \"Macbook Set\" and one of the unit is the\n\"Main Body\", is it possible to buy the \"Macbook Set\" without the\n\"Main Body\" unit? This property is for that case." + } + }, + "required": [ + "price_range", + "id", + "name", + "primary", + "required" + ] + }, + "IShoppingCouponFunnelCriteria": { + "type": "object", + "properties": { + "funnels": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IValueFunnel" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IVariableFunnel" + } + ] + }, + "minItems": 1, + "title": "List of target funnels", + "description": "List of target funnels." + }, + "type": { + "const": "funnel", + "title": "Descrimanator type", + "description": "Descrimanator type." + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "Direction of the criteria", + "description": "Direction of the criteria." + } + }, + "required": [ + "funnels", + "type", + "direction" + ], + "description": "Limit the funnel of discount coupons.\n\n`ishoppingcouponfunnelcriteria` is a subtype entity of\n{@link IShoppingCouponCriteria }, and is used when you want to issue or\nexclude discount coupons only to {@link IShoppingCustomer customers} who\ncame from a specific path.\n\nAnd funnel restrictions are possible in 3 ways: The first is\n{@link IShoppingCustomer.referrer }, and by parsing\n{@link IShoppingCustomer.href }, which records the customer's access\naddress, restrictions can be made in units of specific URLs or variables." + }, + "IShoppingCouponDiscount": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponDiscount.IAmount" + }, + { + "$ref": "#/components/schemas/IShoppingCouponDiscount.IPercent" + } + ], + "description": "Discount information of the coupon.\n\n`IShoppingCouponDiscount` is a type representing the discount information\nof a {@link IShoppingCoupon }. Also, it is an union type that divided\nby the {@link unit } of the discount value, `amount` or `percent`." + }, + "IShoppingCoupon.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest.ISearch" + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-coupon.name" + }, + { + "const": "-coupon.unit" + }, + { + "const": "-coupon.value" + }, + { + "const": "-coupon.created_at" + }, + { + "const": "-coupon.opened_at" + }, + { + "const": "-coupon.closed_at" + }, + { + "const": "+coupon.name" + }, + { + "const": "+coupon.unit" + }, + { + "const": "+coupon.value" + }, + { + "const": "+coupon.created_at" + }, + { + "const": "+coupon.opened_at" + }, + { + "const": "+coupon.closed_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + }, + "IShoppingCoupon.IRequest.ISearch": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "IPageIShoppingCoupon": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCoupon" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IPage.IPagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "IShoppingDeposit.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingDeposit.IRequest.ISearch" + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-deposit.source" + }, + { + "const": "-deposit.code" + }, + { + "const": "-deposit.direction" + }, + { + "const": "+deposit.source" + }, + { + "const": "+deposit.code" + }, + { + "const": "+deposit.direction" + } + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + }, + "IShoppingDeposit.IRequest.ISearch": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + } + }, + "IPageIShoppingDeposit": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeposit" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingDeposit": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "$ref": "#/components/schemas/IShoppingDeposit.Direction" + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "IShoppingDeposit.Direction": { + "oneOf": [ + { + "const": 1 + }, + { + "const": -1 + } + ] + }, + "IShoppingDeposit.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [ + "code", + "source", + "direction" + ] + }, + "IShoppingMileage.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingMileage.IRequest.ISearch" + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-mileage.source" + }, + { + "const": "-mileage.code" + }, + { + "const": "-mileage.direction" + }, + { + "const": "+mileage.source" + }, + { + "const": "+mileage.code" + }, + { + "const": "+mileage.direction" + } + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + }, + "IShoppingMileage.IRequest.ISearch": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + } + }, + "IPageIShoppingMileage": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileage" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingMileage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "$ref": "#/components/schemas/IShoppingMileage.Direction" + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "IShoppingMileage.Direction": { + "oneOf": [ + { + "const": 1 + }, + { + "const": -1 + } + ] + }, + "IShoppingMileage.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + } + }, + "required": [ + "code", + "source", + "direction", + "value" + ] + }, + "IShoppingMileageDonation.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingMileageDonation.IRequest.ISearch" + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-donation.created_at" + }, + { + "const": "-donation.value" + }, + { + "const": "-donation.reason" + }, + { + "const": "+donation.created_at" + }, + { + "const": "+donation.value" + }, + { + "const": "+donation.reason" + } + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + }, + "IShoppingMileageDonation.IRequest.ISearch": { + "type": "object", + "properties": { + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen.IRequest.ISearch" + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "IShoppingCitizen.IRequest.ISearch": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$" + }, + "name": { + "type": "string" + } + } + }, + "IPageIShoppingMileageDonation": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileageDonation" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingMileageDonation": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "administrator": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen" + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "administrator", + "citizen", + "value", + "reason", + "created_at" + ] + }, + "IShoppingMileageDonation.ICreate": { + "type": "object", + "properties": { + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "citizen_id", + "value", + "reason" + ] + }, + "IShoppingOrder.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest.ISearch" + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-order.price" + }, + { + "const": "-order.quantity" + }, + { + "const": "-order.created_at" + }, + { + "const": "-order.publish.paid_at" + }, + { + "const": "+order.price" + }, + { + "const": "+order.quantity" + }, + { + "const": "+order.created_at" + }, + { + "const": "+order.publish.paid_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of orders with pagination and searching/sorting conditions." + }, + "IShoppingOrder.IRequest.ISearch": { + "type": "object", + "properties": { + "min_price": { + "type": "number" + }, + "max_price": { + "type": "number" + }, + "paid": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ] + }, + "sale": { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" + } + } + }, + "IShoppingSale.IRequest.ISearch": { + "type": "object", + "properties": { + "show_paused": { + "type": "boolean" + }, + "show_suspended": { + "oneOf": [ + { + "const": "only" + }, + { + "type": "boolean" + } + ] + }, + "title": { + "type": "string" + }, + "content": { + "type": "string" + }, + "title_or_content": { + "type": "string" + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice.ISearch" + }, + "review": { + "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch" + }, + "section_codes": { + "type": "array", + "items": { + "type": "string" + } + }, + "channel_codes": { + "type": "array", + "items": { + "type": "string" + } + }, + "channel_category_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IRequest.ISearch" + } + } + }, + "IShoppingPrice.ISearch": { + "type": "object", + "properties": { + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + } + } + }, + "IShoppingSaleReview.IInvertSearch": { + "type": "object", + "properties": { + "score": { + "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.IScoreRange" + }, + "count": { + "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.ICountRange" + } + } + }, + "IShoppingSaleReview.IInvertSearch.IScoreRange": { + "type": "object", + "properties": { + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "IShoppingSaleReview.IInvertSearch.ICountRange": { + "type": "object", + "properties": { + "minimum": { + "type": "integer" + }, + "maximum": { + "type": "integer" + } + } + }, + "IShoppingSeller.IRequest.ISearch": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "nickname": { + "type": "string" + } + } + }, + "IPageIShoppingOrder": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrder" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingOrder": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "Customer who've applied for the order", + "description": "Customer who've applied for the order." + }, + "goods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderGood" + }, + "minItems": 1, + "title": "List of goods in the order", + "description": "List of goods in the order." + }, + "price": { + "$ref": "#/components/schemas/IShoppingOrderPrice", + "title": "Price information including discounts", + "description": "Price information including discounts.\n\nFor reference, this price value has multiplied by the {@link volume } value.\nTherefore, even if {@link volume } value is equal to the target\n{@link IShoppingCartCommodity.volume }, this price value can be different\nwith the {@link IShoppingCartCommodity.price } value." + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish" + } + ], + "title": "Order completion and payment information", + "description": "Order completion and payment information." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "id", + "customer", + "goods", + "price", + "publish", + "created_at" + ], + "description": "Order application information.\n\n`IShoppingOrder` is an entity that embodies {@link IShoppingCustomer customer}'s\norder application information. However, please note that at this time, you are\nstill at the \"order application\" stage and not the \"order confirmation\" stage.\n\nAnd as soon as a customer applies for an order, all\n{@link IShoppingCartCommodity commodities} in the target shopping cart are\npromoted to {@link IShoppingOrderGood goods}, and those good records are created\nunder this `IShoppingOrder`.\n\nOf course, not all commodities in the target shopping cart become\n{@link IShoppingOrderGood }, but only those selected by the customer become the\n{@link IShoppingOrderGood }." + }, + "IShoppingCustomer": { + "type": "object", + "properties": { + "type": { + "const": "customer", + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMember" + } + ], + "title": "Membership information", + "description": "Membership information.\n\nIf the customer has joined as a member." + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "Citizen information", + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "Belonged channel", + "description": "Belonged channel." + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser" + } + ], + "title": "External user information", + "description": "External user information.\n\nWhen the customer has come frome an external service." + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + }, + "IShoppingMember": { + "type": "object", + "properties": { + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "Citizen information", + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be." + }, + "seller": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSeller" + } + ], + "title": "Seller information", + "description": "Seller information.\n\nIf the member also signed up as a seller." + }, + "administrator": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingAdministrator" + } + ], + "title": "Administrator information", + "description": "Administrator information.\n\nIf the member also signed up as an administrator." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMemberEmail" + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "Member Account.\n\n`IShoppingMember` is an entity that symbolizes the case when a\n{@link IShoppingCustomer } signs up as a member of this shopping mall\nsystem.\n\nIf a `IShoppingMember` has seller or administrator property. it means that\nthe {@link IShoppingCustomer } has acting as a {@link IShoppingSeller seller}\nor {@link IShoppingAdministrator administrator} at the same time." + }, + "IShoppingOrderGood": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "commodity": { + "$ref": "#/components/schemas/IShoppingCartCommodity", + "title": "Commodity that is the basis of the good", + "description": "Commodity that is the basis of the good." + }, + "volume": { + "type": "integer", + "title": "Volume of the good", + "description": "Volume of the good.\n\nThe value multiplied to {@link IShoppingCartCommodityStock.quantity }.\nIt's purpose is exactly same with {@link IShoppingCartCommodity.volume },\nbut rewritten because the {@link IShoppingCartCommodity } records are reusable\nuntil payment." + }, + "price": { + "$ref": "#/components/schemas/IShoppingOrderPrice.ISummary", + "title": "Price information including discounts and multipled volume", + "description": "Price information including discounts and multipled volume." + }, + "state": { + "oneOf": [ + { + "type": "null" + }, + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "State of delivery about the good", + "description": "State of delivery about the good." + }, + "confirmed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Confirmation time of order good", + "description": "Confirmation time of order good.\n\nWhen be confirmed, customer can't request refund or exchange.\n\nThe confirmation be accomplished by following cases.\n\n- Customer does it directly.\n- 14 days after the delivery." + } + }, + "required": [ + "id", + "commodity", + "volume", + "price", + "state", + "confirmed_at" + ], + "description": "Information about the individual goods that make up your order.\n\n`IShoppingOrderGood` is an entity that represents each good ordered by a\n{@link IShoppingCustomer customer}, and the record is created in the process\nof upgrading the product {@link IShoppingCartCommodity commodity} in the\nshopping cart to a good due to the customer's {@link IShoppingOrder order}\nrequest.\n\nAnd `IShoppingOrderGood`, like {@link IShoppingCartCommodity }, is a concept\nthat corresponds to the listing {@link IShoppingSaleSnapshot sale snapshot}.\n\nFor reference, `IShoppingOrderGood` also contains {@link volume } information\nseparately from the belonging {@link IShoppingCartCommodity.volume }. This is\nbecause there are some cases where you put 3 books in your shopping cart and\nthen change them to 4 during the actual order application process. This is to\nincrease the reusability of the shopping cart by changing the volume attribute\nof the current entity rather than directly changing the commodity information.\n\nIn addition, `IShoppingOrderGood` becomes the most basic unit for the post-order\nprocess, that is, after service (A/S). For example, after receiving a\ncustomer's product, confirming the order is recorded in the {@link confirmed_at }\nattribute. Additionally, `IShoppingOrderGood` is the unit in which customers\nissues or request exchanges or refunds for ordered products." + }, + "IShoppingCartCommodity": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "sale": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot.IInvert", + "title": "Invert information of the sale (snapshot), in the perspective of commodity", + "description": "Invert information of the sale (snapshot), in the perspective of commodity." + }, + "orderable": { + "type": "boolean", + "title": "Whether current commodity is orderable or not", + "description": "Whether current commodity is orderable or not.\n\nIf this attribute is `false`, then the commodity is not orderable, because\nit has already been ordered." + }, + "pseudo": { + "type": "boolean", + "title": "Whether current commodity is pseudo or not", + "description": "Whether current commodity is pseudo or not.\n\nWhen this attribute is `true`, then the commodity is not the real one,\nbut just fake information only for calculating the discount effect by\n{@link IShoppingCoupon coupons}." + }, + "volume": { + "type": "integer", + "minimum": 1, + "title": "Volume of the commodity to purchase", + "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity } values." + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "Price of the commodity", + "description": "Price of the commodity.\n\nFor reference, this price value has not been multiplied by the\n{@link volume } value. It just sumed up the prices of the children\n{@link IShoppingSaleUnitStock.IInvert.price } values." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "id", + "sale", + "orderable", + "pseudo", + "volume", + "price", + "created_at" + ], + "description": "Item in a shopping cart.\n\n`IShoppingCartCommodity` is an entity that represents a\n{@link IShoppingSaleSnapshot snapshot} of the items that\n{@link IShoppingCustomer customer} has placed into his shopping cart with a\n{@link IShoppingOrder purchase} in mind. And if the customer continues this\ninto an actual order in the future, `IShoppingCartCommodity` be changed to\n{@link IShoppingOrderGood }.\n\nAnd while adding a sale snapshot to the shopping cart, the customer inevitably\nselects specific {@link IShoppingSaleUnit units} and\n{@link IShoppingSaleUnitStock final stocks} within the listing snapshot.\nInformation about these units and stocks is recorded in the subsidiary entity\n{@link IShoppingCartCommodityStock }. Also, there is an attribute {@link volume }\nthat indicates how many sets of snapshots of the target commodity will be\npurchased. This \"volume\" is a value that will be multiplied by\n{@link IShoppingSaleUnitStock.IInvert.quantity }, the quantity for each\ncomponent." + }, + "IShoppingSaleSnapshot.IInvert": { + "type": "object", + "properties": { + "section": { + "$ref": "#/components/schemas/IShoppingSection", + "title": "Belonged section's information", + "description": "Belonged section's information." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert", + "title": "Seller who've registered the sale", + "description": "Seller who've registered the sale." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key of Sale", + "description": "Primary Key of Sale." + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "Primary Key of Snapshot", + "description": "Primary Key of Snapshot." + }, + "latest": { + "type": "boolean", + "title": "Whether the snapshot is the latest one or not", + "description": "Whether the snapshot is the latest one or not." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", + "title": "Description and image content describing the sale", + "description": "Description and image content describing the sale." + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "List of channels and categories", + "description": "List of channels and categories.\n\nWhich channels and categories the sale is registered to." + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "List of search tags", + "description": "List of search tags." + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.IInvert" + }, + "minItems": 1, + "title": "List of units", + "description": "List of units.\n\nRecords about individual product composition informations that are sold\nin the sale. Each {@link IShoppingSaleUnit unit} record has configurable\n{@link IShoppingSaleUnitOption options},\n{@link IShoppingSaleUnitOptionCandidate candidate} values for each\noption, and {@link IShoppingSaleUnitStock final stocks} determined by\nselecting every candidate values of each option." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record.\n\nNote that, this property is different with {@link opened_at },\nwhich means the timepoint of the sale is opened." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Last updated time of the record", + "description": "Last updated time of the record.\n\nIn another words, creation time of the last snapshot." + }, + "paused_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Paused time of the sale", + "description": "Paused time of the sale.\n\nThe sale is paused by the seller, for some reason.\n\n{@link IShoppingCustomer Customers} can still see the sale on the\nboth list and detail pages, but the sale has a warning label\n\"The sale is paused by the seller\"." + }, + "suspended_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Suspended time of the sale", + "description": "Suspended time of the sale.\n\nThe sale is suspended by the seller, for some reason.\n\n{@link IShoppingCustomer Customers} cannot see the sale on the\nboth list and detail pages. It is almost same with soft delettion,\nbut there's a little bit difference that the owner\n{@link IShoppingSeller seller} can still see the sale and resume it.\n\nOf course, the {@link IShoppingCustomer customers} who have\nalready purchased the sale can still see the sale on the\n{@link IShoppingOrder order} page." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Closing time of the sale", + "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." + } + }, + "required": [ + "section", + "seller", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "opened_at", + "closed_at" + ], + "description": "Invert information of the sale snapshot, in the perspective of commodity.\n\n`IShoppingSaleSnapshot.IInvert` is a structure used to represent a\nsnapshot in the perspective of a {@link IShoppingCommodity }, corresponding\nto an {@link IShoppingCartCommodityStock } entity.\n\nTherefore, `IShoppingSaleSnapshot.IInvert` does not contain every\n{@link IShoppingSaleUnit units} and {@link IShoppingSaleUnitStock stocks}\nof the snapshot records, but only some of the records which are put\ninto the {@link IShoppingCartCommodity shopping cart}." + }, + "IShoppingSaleUnit.IInvert": { + "type": "object", + "properties": { + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStock.IInvert" + }, + "minItems": 1, + "title": "List of final stocks", + "description": "List of final stocks." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "name": { + "type": "string", + "title": "Representative name of the unit", + "description": "Representative name of the unit." + }, + "primary": { + "type": "boolean", + "title": "Whether the unit is primary or not", + "description": "Whether the unit is primary or not.\n\nJust a labeling value." + }, + "required": { + "type": "boolean", + "title": "Whether the unit is required or not", + "description": "Whether the unit is required or not.\n\nWhen the unit is required, the customer must select the unit. If do not\nselect, customer can't buy it.\n\nFor example, if there's a sale \"Macbook Set\" and one of the unit is the\n\"Main Body\", is it possible to buy the \"Macbook Set\" without the\n\"Main Body\" unit? This property is for that case." + } + }, + "required": [ + "stocks", + "id", + "name", + "primary", + "required" + ] + }, + "IShoppingSaleUnitStock.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "name": { + "type": "string", + "title": "Representative name of the stock", + "description": "Representative name of the stock." + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "Price of the stock", + "description": "Price of the stock." + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "Quantity of the stock in the cart", + "description": "Quantity of the stock in the cart." + }, + "inventory": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockInventory", + "title": "Current inventory status of the stock", + "description": "Current inventory status of the stock." + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockChoice.IInvert" + }, + "title": "List of choices", + "description": "List of choices.\n\nWhich values being written for each option." + } + }, + "required": [ + "id", + "name", + "price", + "quantity", + "inventory", + "choices" + ], + "description": "Invert information from the cart." + }, + "IShoppingSaleUnitStockInventory": { + "type": "object", + "properties": { + "income": { + "type": "integer", + "title": "Total income quantity", + "description": "Total income quantity." + }, + "outcome": { + "type": "integer", + "title": "Total outcome quantity", + "description": "Total outcome quantity." + } + }, + "required": [ + "income", + "outcome" + ], + "description": "Inventory information of a final stock." + }, + "IShoppingSaleUnitStockChoice.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "option": { + "$ref": "#/components/schemas/IShoppingSaleUnitOption.IInvert", + "title": "Target option", + "description": "Target option." + }, + "candidate": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate" + } + ], + "title": "Selected candidate value", + "description": "Selected candidate value." + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ], + "title": "Written value", + "description": "Written value." + } + }, + "required": [ + "id", + "option", + "candidate", + "value" + ], + "description": "Invert information from the cart." + }, + "IShoppingSaleUnitOption.IInvert": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.IInvert" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" + } + ], + "description": "Inversely referenced information of the option." + }, + "IShoppingSaleUnitSelectableOption.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "type": { + "const": "select", + "title": "Discriminant for the type of selectable option", + "description": "Discriminant for the type of selectable option." + }, + "name": { + "type": "string", + "title": "Represents the name of the option", + "description": "Represents the name of the option." + }, + "variable": { + "type": "boolean", + "title": "Whether the option is variable or not", + "description": "Whether the option is variable or not.\n\nWhen type of current option is \"select\", this attribute means whether\nselecting different candidate value affects the final stock or not." + } + }, + "required": [ + "id", + "type", + "name", + "variable" + ] + }, + "IShoppingSaleUnitDescriptiveOption": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "type": { + "oneOf": [ + { + "const": "string" + }, + { + "const": "number" + }, + { + "const": "boolean" + } + ], + "title": "Type of descriptive option", + "description": "Type of descriptive option.\n\nWhich typed value should be written when purchasing." + }, + "name": { + "type": "string", + "title": "Readable name of the option", + "description": "Readable name of the option." + } + }, + "required": [ + "id", + "type", + "name" + ], + "description": "Descriptive option.\n\nWhen type of the option not `\"select\"`, it means the option is descriptive\nthat requiring {@link IShoppingCustomer customers} to write some value to\n{@link IShoppingOrder purchase}. Also, whatever customer writes about the\noption, it does not affect the {@link IShoppingSaleUnitStock final stock}.\n\nAnother words, the descriptive option is just for information transfer." + }, + "IShoppingSaleUnitOptionCandidate": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "name": { + "type": "string", + "title": "Represents the name of the candidate value", + "description": "Represents the name of the candidate value." + } + }, + "required": [ + "id", + "name" + ], + "description": "Selectable candidate values within an option.\n\n`IShoppingSaleUnitOptionCandidate` is an entity that represents individual\ncandidate values that can be selected from\n{@link IShoppingSaleUnitSelectableOption options of the \"select\" type}.\n\n- Example\n - RAM: 8GB, 16GB, 32GB\n - GPU: RTX 3060, RTX 4080, TESLA\n - License: Private, Commercial, Educatiion\n\nBy the way, if belonged option is not \"select\" type, this entity never\nbeing used." + }, + "IShoppingOrderPrice.ISummary": { + "type": "object", + "properties": { + "cash": { + "type": "number", + "minimum": 0, + "title": "Amount of the cash payment", + "description": "Amount of the cash payment." + }, + "deposit": { + "type": "number", + "minimum": 0, + "title": "Amount of the deposit payment", + "description": "Amount of the deposit payment." + }, + "mileage": { + "type": "number", + "minimum": 0, + "title": "Amount of the mileage payment", + "description": "Amount of the mileage payment." + }, + "ticket": { + "type": "number", + "minimum": 0, + "title": "Amount of the discount coupon ticket payment", + "description": "Amount of the discount coupon ticket payment." + }, + "nominal": { + "type": "number", + "minimum": 0, + "title": "Nominal price", + "description": "Nominal price.\n\nThis is not {@link real real price} to pay, but just a nominal price to show.\nIf this value is greater than the {@link real real price}, it would be shown\nlike {@link IShoppingSeller seller} is giving a discount." + }, + "real": { + "type": "number", + "minimum": 0, + "title": "Real price to pay", + "description": "Real price to pay." + } + }, + "required": [ + "cash", + "deposit", + "mileage", + "ticket", + "nominal", + "real" + ], + "description": "Summarized information of the order price." + }, + "IShoppingOrderPrice": { + "type": "object", + "properties": { + "ticket_payments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicketPayment" + }, + "title": "List of discount coupon ticket payments", + "description": "List of discount coupon ticket payments." + }, + "cash": { + "type": "number", + "minimum": 0, + "title": "Amount of the cash payment", + "description": "Amount of the cash payment." + }, + "deposit": { + "type": "number", + "minimum": 0, + "title": "Amount of the deposit payment", + "description": "Amount of the deposit payment." + }, + "mileage": { + "type": "number", + "minimum": 0, + "title": "Amount of the mileage payment", + "description": "Amount of the mileage payment." + }, + "ticket": { + "type": "number", + "minimum": 0, + "title": "Amount of the discount coupon ticket payment", + "description": "Amount of the discount coupon ticket payment." + }, + "nominal": { + "type": "number", + "minimum": 0, + "title": "Nominal price", + "description": "Nominal price.\n\nThis is not {@link real real price} to pay, but just a nominal price to show.\nIf this value is greater than the {@link real real price}, it would be shown\nlike {@link IShoppingSeller seller} is giving a discount." + }, + "real": { + "type": "number", + "minimum": 0, + "title": "Real price to pay", + "description": "Real price to pay." + } + }, + "required": [ + "ticket_payments", + "cash", + "deposit", + "mileage", + "ticket", + "nominal", + "real" + ], + "description": "Price infromation of the order including discounts." + }, + "IShoppingCouponTicketPayment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "ticket": { + "$ref": "#/components/schemas/IShoppingCouponTicket", + "title": "Target ticket", + "description": "Target ticket." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "id", + "ticket", + "created_at" + ], + "description": "Discount coupon ticket payment details.\n\n`IShoppingCouponTicketPayment` is an entity that embodies the payment\ninformation for the {@link IShoppingOrder order} of\n{@link IShoppingCouponTicket }, and is used when a consumer uses the\ndiscount coupon ticket he or she was issued to order and has the payment\namount deducted.\n\nAnd since {@link IShoppingOrder } itself is not an entity used in\nsituations where an order is completed, but rather an entity designed to\nexpress an order request, the creation of this\n`IShoppingCouponTicketPayment` record does not actually mean that the\nattached ticket disappears. Until the {@link IShoppingCustomer customer}\n{@link IShoppingOrderPublish.paid_at completes the payment} and confirms\nthe order, the ticket can be understood as a kind of deposit.\n\nAdditionally, this record can be deleted by the customer reversing the\npayment of the ticket, but it can also be deleted when the attribution\norder itself is cancelled." + }, + "IShoppingCouponTicket": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "Customer who've taken the coupon ticket", + "description": "Customer who've taken the coupon ticket." + }, + "coupon": { + "$ref": "#/components/schemas/IShoppingCoupon", + "title": "Target coupon", + "description": "Target coupon." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + }, + "expired_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Expiration time of the ticket", + "description": "Expiration time of the ticket." + } + }, + "required": [ + "id", + "customer", + "coupon", + "created_at", + "expired_at" + ], + "description": "Discount coupon ticket issuance details.\n\n`IShoppingCouponTicket` is an entity that symbolizes\n{@link IShoppingCoupon discount coupon} tickets issued by\n{@link IShoppingCustomer customers}.\n\nAnd if the target discount coupon specification itself has an expiration\ndate, the expiration date is recorded in expired_at and is automatically\ndiscarded after that expiration date. Of course, it doesn't matter if you\nuse the discount coupon for your order within the deadline." + }, + "IShoppingOrderPublish": { + "type": "object", + "properties": { + "deliveries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDelivery" + }, + "title": "List of deliveries", + "description": "List of deliveries.\n\nAn {@link IShoppingOrder order} can be delivered in multiple times.\nOf course, the opposite case is also possible, that a\n{@link IShoppingDelivery delivery} can be composed of multiple orders." + }, + "state": { + "$ref": "#/components/schemas/IShoppingDelivery.State", + "title": "State of the order, about the deliveries", + "description": "State of the order, about the deliveries." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + }, + "paid_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Time when the order was paid", + "description": "Time when the order was paid." + }, + "cancelled_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Time when the payment was cancelled", + "description": "Time when the payment was cancelled." + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress", + "title": "Address where the {@link IShoppingOrderGood goods} to be delivered", + "description": "Address where the {@link IShoppingOrderGood goods} to be delivered." + } + }, + "required": [ + "deliveries", + "state", + "id", + "created_at", + "paid_at", + "cancelled_at", + "address" + ], + "description": "Order completion and payment information.\n\n`IShoppingOrderPublish` is an entity that embodies the series of processes\nin which a {@link IShoppingCustomer customer} pays for his or her\n{@link IShoppingOrder order}, thereby completing the order. And only after\nthe order is {@link paid_at completed}, can the {@link IShoppingSeller seller}\nrecognize that the customer has purchased his product.\n\nBy the way, please note that just because the `IShoppingOrderPublish` record\nexists, it does not mean that the payment has been completed. Of course, with\n\"credit cards\" and \"Google Pay\", payment application and payment occur at the\nsame time. However, there are some cases where payment is made after the\npayment application, such as \"bank transfer\" or \"virtual account payment\".\nTherefore, to see the completion of payment, be sure to check the\n{@link paid_at } property.\n\nIn addition, even after payment has been made, there may be cases where it is\nsuddenly cancelled, so please be aware of this as well." + }, + "IShoppingDelivery": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller", + "title": "Seller who've delivered the goods", + "description": "Seller who've delivered the goods." + }, + "journeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney" + }, + "title": "List of journeys of the delivery", + "description": "List of journeys of the delivery." + }, + "pieces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece" + }, + "minItems": 1, + "title": "List of pieces of the delivery", + "description": "List of pieces of the delivery." + }, + "shippers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper" + }, + "title": "List of shippers of the delivery", + "description": "List of shippers of the delivery." + }, + "state": { + "$ref": "#/components/schemas/IShoppingDelivery.State", + "title": "State of the delivery", + "description": "State of the delivery." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "id", + "seller", + "journeys", + "pieces", + "shippers", + "state", + "created_at" + ], + "description": "Delivery information.\n\nWhen delivering {@link IShoppingOrderGood goods} to\n{@link IShoppingCustomer customer}, {@link IShoppingSeller seller} can deliver\nmultiple {@link IShoppingSaleUnitStock stocks}, goods at once. Also, it is\npossible to deliver a stock or good in multiple times due to physical restriction\nlike volume or weight problem.\n\nAs you can see from above, the relationship between delivery with\n{@link IShoppingOrder order} (or {@link IShoppingOrderGood good}) is not 1: 1 or\nN: 1, but M: N. Entity `IShoppingDelivery` has been designed to represent such\nrelationship, by referencing target stocks or goods through subsidiary entity\n{@link IShoppingDeliveryPiece }.\n\nAlso, delivery does not end with only one step. It has multiple processes like\nmanufacturing, planning, shipping and delivering. Those steps are represented by\nanother subsidiary entity {@link IShoppingDeliveryJourney }." + }, + "IShoppingDeliveryJourney": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + }, + "deleted_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Deletion time of the record", + "description": "Deletion time of the record." + }, + "type": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.Type", + "title": "Type of journey", + "description": "Type of journey.\n\n- preparing\n- manufacturing\n- shipping\n- delivering" + }, + "title": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "Title of journey", + "description": "Title of journey." + }, + "description": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "Description of journey", + "description": "Description of journey." + }, + "started_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Start time of the journey", + "description": "Start time of the journey." + }, + "completed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "id", + "created_at", + "deleted_at", + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "Journey of delivery.\n\n`IShoppingDeliveryJourney` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing each journey of the delivery. For reference, the word journey\nmeans each step of the delivery process, such as preparing, shipping, and\ndelivering {@link IShoppingOrderGood goods} to the\n{@link IShoppingCustomer customer}." + }, + "IShoppingDeliveryJourney.Type": { + "oneOf": [ + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + } + ] + }, + "IShoppingDeliveryPiece": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "publish_id": { + "type": "string", + "format": "uuid", + "title": "Target order's {@link IShoppingOrderPublish.id }", + "description": "Target order's {@link IShoppingOrderPublish.id }." + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "Target good's {@link IShoppingOrderGood.id }", + "description": "Target good's {@link IShoppingOrderGood.id }." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "Target stock's {@link IShoppingSaleUnitStock.id }", + "description": "Target stock's {@link IShoppingSaleUnitStock.id }." + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "Quantity of the stock", + "description": "Quantity of the stock.\n\nIt can be precision value to express splitted shipping." + } + }, + "required": [ + "id", + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "Which stocks are delivered.\n\n`IShoppingDeliveryPiece` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing how much quantity is delivered for each\n{@link IShoppingSaleUnitStock stock} in {@link IShoppingOrder }.\n\nFor reference, as an order can be delivered in multiple times due to volume\nor weight problem, it is possible to have multiple `IShoppingDeliveryPiece`\nrecords for a single stock." + }, + "IShoppingDeliveryShipper": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "company": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "id", + "created_at", + "company", + "name", + "mobile" + ] + }, + "IShoppingDelivery.State": { + "oneOf": [ + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "description": "State of delivery\n\n- `none`: No delivery or journey record\n- `underway`: Some pieces are over preparing, but others are not\n- `preparing`: At least preparing\n- `manufacturing`: At least manufacturing\n- `shipping`: At least shipping\n- `delivering`: At least delivering\n- `arrived`: Every pieces are arrived" + }, + "IShoppingAddress": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number to contact", + "description": "Mobile number to contact." + }, + "name": { + "type": "string", + "title": "Representative name of the address", + "description": "Representative name of the address.\n\nSometimes be receiver's name, and sometimes be place name." + }, + "country": { + "type": "string", + "title": "Country name", + "description": "Country name." + }, + "province": { + "type": "string", + "title": "Province name", + "description": "Province name." + }, + "city": { + "type": "string", + "title": "City name", + "description": "City name." + }, + "department": { + "type": "string", + "title": "Department name", + "description": "Department name." + }, + "possession": { + "type": "string", + "title": "Detailed address containing street name, building number, and room number", + "description": "Detailed address containing street name, building number, and room number." + }, + "zip_code": { + "type": "string", + "title": "Zip code, or postal code", + "description": "Zip code, or postal code." + }, + "special_note": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "Special description if required", + "description": "Special description if required." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ], + "description": "The address information." + }, + "IShoppingSale.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch", + "title": "Search conditions", + "description": "Search conditions." + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-seller.created_at" + }, + { + "const": "-seller.goods.payments.real" + }, + { + "const": "-seller.goods.publish_count" + }, + { + "const": "-seller.reviews.average" + }, + { + "const": "-seller.reviews.count" + }, + { + "const": "-goods.publish_count" + }, + { + "const": "-goods.payments.real" + }, + { + "const": "-reviews.average" + }, + { + "const": "-reviews.count" + }, + { + "const": "-sale.created_at" + }, + { + "const": "-sale.updated_at" + }, + { + "const": "-sale.opened_at" + }, + { + "const": "-sale.closed_at" + }, + { + "const": "-sale.content.title" + }, + { + "const": "-sale.price_range.lowest.real" + }, + { + "const": "-sale.price_range.highest.real" + }, + { + "const": "+seller.created_at" + }, + { + "const": "+seller.goods.payments.real" + }, + { + "const": "+seller.goods.publish_count" + }, + { + "const": "+seller.reviews.average" + }, + { + "const": "+seller.reviews.count" + }, + { + "const": "+goods.publish_count" + }, + { + "const": "+goods.payments.real" + }, + { + "const": "+reviews.average" + }, + { + "const": "+reviews.count" + }, + { + "const": "+sale.created_at" + }, + { + "const": "+sale.updated_at" + }, + { + "const": "+sale.opened_at" + }, + { + "const": "+sale.closed_at" + }, + { + "const": "+sale.content.title" + }, + { + "const": "+sale.price_range.lowest.real" + }, + { + "const": "+sale.price_range.highest.real" + } + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized sales with pagination and searching/sorting options." + }, + "IPageIShoppingSale.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSale.ISummary" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSale": { + "type": "object", + "properties": { + "section": { + "$ref": "#/components/schemas/IShoppingSection", + "title": "Belonged section", + "description": "Belonged section." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert", + "title": "Seller who has registered the sale", + "description": "Seller who has registered the sale." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key of Sale", + "description": "Primary Key of Sale." + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "Primary Key of Snapshot", + "description": "Primary Key of Snapshot." + }, + "latest": { + "type": "boolean", + "title": "Whether the snapshot is the latest one or not", + "description": "Whether the snapshot is the latest one or not." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent", + "title": "Description and image content describing the sale", + "description": "Description and image content describing the sale." + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "List of channels and categories", + "description": "List of channels and categories.\n\nWhich channels and categories the sale is registered to." + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "List of search tags", + "description": "List of search tags." + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit" + }, + "minItems": 1, + "title": "List of units", + "description": "List of units.\n\nRecords about individual product composition informations that are sold\nin the sale. Each {@link IShoppingSaleUnit unit} record has configurable\n{@link IShoppingSaleUnitOption options},\n{@link IShoppingSaleUnitOptionCandidate candidate} values for each\noption, and {@link IShoppingSaleUnitStock final stocks} determined by\nselecting every candidate values of each option." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record.\n\nNote that, this property is different with {@link opened_at },\nwhich means the timepoint of the sale is opened." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Last updated time of the record", + "description": "Last updated time of the record.\n\nIn another words, creation time of the last snapshot." + }, + "paused_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Paused time of the sale", + "description": "Paused time of the sale.\n\nThe sale is paused by the seller, for some reason.\n\n{@link IShoppingCustomer Customers} can still see the sale on the\nboth list and detail pages, but the sale has a warning label\n\"The sale is paused by the seller\"." + }, + "suspended_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Suspended time of the sale", + "description": "Suspended time of the sale.\n\nThe sale is suspended by the seller, for some reason.\n\n{@link IShoppingCustomer Customers} cannot see the sale on the\nboth list and detail pages. It is almost same with soft delettion,\nbut there's a little bit difference that the owner\n{@link IShoppingSeller seller} can still see the sale and resume it.\n\nOf course, the {@link IShoppingCustomer customers} who have\nalready purchased the sale can still see the sale on the\n{@link IShoppingOrder order} page." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Closing time of the sale", + "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." + } + }, + "required": [ + "section", + "seller", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "opened_at", + "closed_at" + ], + "description": "Seller sales products.\n\n`IShoppingSale` is an entity that embodies \"product sales\" (sales)\ninformation registered by the {@link ISoppingSeller seller}. And the main\ninformation of the sale is recorded in the sub {@link IShoppingSaleSnapshot },\nnot in the main `IShoppingSale`. When a seller changes a previously registered\nitem, the existing `IShoppingSale` record is not changed, but a new\n{@link IShoppingSaleSnapshot snapshot} record be created.\n\nThis is to preserve the {@link IShoppingCustomer customer}'s\n{@link IShoppingOrder purchase history} flawlessly after the customer\npurchases a specific item, even if the seller changes the components or\nprice of the item. It is also intended to support sellers in so-called A/B\ntesting, which involves changing components or prices and measuring the\nperformance in each case." + }, + "IShoppingSaleContent": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the content", + "description": "Title of the content." + }, + "format": { + "$ref": "#/components/schemas/IShoppingSaleContent.Type", + "title": "Format of the body content", + "description": "Format of the body content.\n\nSame meaning with file extension like `html`, `md`, and `txt`." + }, + "body": { + "type": "string", + "title": "The main body content", + "description": "The main body content." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + }, + "title": "List of attached files", + "description": "List of attached files." + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + }, + "title": "List of thumbnails", + "description": "List of thumbnails." + } + }, + "required": [ + "id", + "title", + "format", + "body", + "files", + "thumbnails" + ], + "description": "Content information of sale snapshot.\n\n`IShoppingSaleContent` is an entity embodies the description contents\nof {@link IShoppingSale }." + }, + "IShoppingSaleContent.Type": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ] + }, + "IShoppingSaleUnit": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitOption" + }, + "title": "List of options", + "description": "List of options." + }, + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStock" + }, + "minItems": 1, + "title": "List of final stocks", + "description": "List of final stocks." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "name": { + "type": "string", + "title": "Representative name of the unit", + "description": "Representative name of the unit." + }, + "primary": { + "type": "boolean", + "title": "Whether the unit is primary or not", + "description": "Whether the unit is primary or not.\n\nJust a labeling value." + }, + "required": { + "type": "boolean", + "title": "Whether the unit is required or not", + "description": "Whether the unit is required or not.\n\nWhen the unit is required, the customer must select the unit. If do not\nselect, customer can't buy it.\n\nFor example, if there's a sale \"Macbook Set\" and one of the unit is the\n\"Main Body\", is it possible to buy the \"Macbook Set\" without the\n\"Main Body\" unit? This property is for that case." + } + }, + "required": [ + "options", + "stocks", + "id", + "name", + "primary", + "required" + ], + "description": "Product composition information handled in the sale.\n\n`IShoppingSaleUnit` is an entity that embodies the \"individual product\"\ninformation handled in the {@link IShoppingSale sale}.\n\nFor reference, the reason why `IShoppingSaleUnit` is separated from\n{@link IShoppingSaleSnapshot } by an algebraic relationship of 1: N is because\nthere are some cases where multiple products are sold in one listing. This is\nthe case with so-called \"bundled products\".\n\n- Bundle from regular product (Mackbook Set)\n - Main Body\n - Keyboard\n - Mouse\n - Apple Care (Free A/S Voucher)\n\nAnd again, `IShoppingSaleUnit` does not in itself refer to the\n{@link IShoppingSaleUnitStock final stock} that the\n{@link IShoppingCustomer customer} will {@link IShoppingOrder purchase}.\nThe final stock can be found only after selecting all given\n{@link IShoppingSaleUnitOption options} and their\n{@link IShoppingSaleUnitOptionCandidate candidate values}.\n\nFor example, even if you buy a Macbook, the final stocks are determined only\nafter selecting all the options (CPU / RAM / SSD), etc." + }, + "IShoppingSaleUnitOption": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption" + } + ], + "description": "Individual option information on units for sale.\n\n`IShoppingSaleUnitOption` is a subsidiary entity of\n{@link IShoppingSaleUnit } that represents individual products in the\n{@link IShoppingSale sale}, and is an entity designed to represent individual\noption information for the unit.\n\nAlso, `IShoppingSaleUnitOption` is an union type of two entities,\n{@link IShoppingSaleUnitSelectableOption } and\n{@link IShoppingSaleUnitDescriptiveOption }. To specify the detailed type of\nthem, just use the `if` statement to the {@link type } property like below:\n\n```typescript\nif (option.type === \"select\")\n option.candidates; // IShoppingSaleUnitSelectableOption\n```\n\n- Examples of Options\n - selectable options\n - Computer: CPU, RAM, SSD, etc.\n - Clothes: size, color, style, etc.\n - descriptive options\n - Engrave\n - Simple question\n\nIf the type of option is a variable value in \"select\", the final stock that the\n{@link IShoppingCustomer customer} will purchase changes depending on the\nselection of the {@link IShoppingSaleUnitOptionCandidate candidate value}.\n\nConversely, if it is a type other than \"select\", or if the type is \"select\" but\nvariable is false, this is an option that has no meaning beyond simple information\ntransfer. Therefore, no matter what value the customer enters and chooses when\npurchasing it, the option in this case does not affect the\n{@link IShoppingSaleUnitStock final stock}." + }, + "IShoppingSaleUnitSelectableOption": { + "type": "object", + "properties": { + "candidates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate" + }, + "minItems": 1, + "title": "List of candidate values", + "description": "List of candidate values." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "type": { + "const": "select", + "title": "Discriminant for the type of selectable option", + "description": "Discriminant for the type of selectable option." + }, + "name": { + "type": "string", + "title": "Represents the name of the option", + "description": "Represents the name of the option." + }, + "variable": { + "type": "boolean", + "title": "Whether the option is variable or not", + "description": "Whether the option is variable or not.\n\nWhen type of current option is \"select\", this attribute means whether\nselecting different candidate value affects the final stock or not." + } + }, + "required": [ + "candidates", + "id", + "type", + "name", + "variable" + ], + "description": "Individual option information on units for sale.\n\n`IShoppingSaleUnitSelectableOption` is a subsidiary entity of\n{@link IShoppingSaleUnit } that represents individual products in the\n{@link IShoppingSale sale}, and is an entity designed to represent individual\nselectable option information for the unit.\n\n- Examples of Options\n - selectable options\n - Computer: CPU, RAM, SSD, etc.\n - Clothes: size, color, style, etc.\n - descriptive options\n - Engrave\n - Simple question\n\nIf the {@link variable } property value is `true`, the final stock that the\n{@link IShoppingCustomer customer} will purchase changes depending on the\nselection of the {@link IShoppingSaleUnitOptionCandidate candidate value}.\n\nConversely, if it is a type other than \"select\", or if the {@link variable }\nproperty value is \"false\", , this is an option that has no meaning beyond\nsimple information transfer. Therefore, no matter what value the customer\nchooses when purchasing it, the option in this case does not affect the\n{@link IShoppingSaleUnitStock final stock}." + }, + "IShoppingSaleUnitStock": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "name": { + "type": "string", + "title": "Representative name of the stock", + "description": "Representative name of the stock." + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "Price of the stock", + "description": "Price of the stock." + }, + "inventory": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockInventory", + "title": "Current inventory status of the stock", + "description": "Current inventory status of the stock." + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockChoice" + }, + "title": "List of choices", + "description": "List of choices.\n\nWhich candidate values being chosen for each option." + } + }, + "required": [ + "id", + "name", + "price", + "inventory", + "choices" + ], + "description": "Final component information on units for sale.\n\n`IShoppingSaleUnitStock` is a subsidiary entity of {@link IShoppingSaleUnit }\nthat represents a product catalog for sale, and is a kind of final stock that is\nconstructed by selecting all {@link IShoppingSaleUnitSelectableOption options}\n(variable \"select\" type) and their\n{@link IShoppingSaleUnitOptionCandidate candidate} values in the belonging unit.\nIt is the \"good\" itself that customers actually purchase.\n\n- Product Name) MacBook\n - Options\n - CPU: { i3, i5, i7, i9 }\n - RAM: { 8GB, 16GB, 32GB, 64GB, 96GB }\n - SSD: { 256GB, 512GB, 1TB }\n - Number of final stocks: 4 * 5 * 3 = 60\n\nFor reference, the total number of `IShoppingSaleUnitStock` records in an\nattribution unit can be obtained using Cartesian Product. In other words, the\nvalue obtained by multiplying all the candidate values that each\n(variable \"select\" type) option can have by the number of cases is the total\nnumber of final stocks in the unit.\n\nOf course, without a single variable \"select\" type option, the final stocks\ncount in the unit is only 1." + }, + "IShoppingSaleUnitStockChoice": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "option_id": { + "type": "string", + "format": "uuid", + "description": "Target option's {@link IShoppingSaleUnitOption.id }" + }, + "candidate_id": { + "type": "string", + "format": "uuid", + "description": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id }" + } + }, + "required": [ + "id", + "option_id", + "candidate_id" + ], + "description": "Selection information of final stock.\n\n`IShoppingSaleUnitStockChoice` is an entity that represents which\n{@link IShoppingSaleUnitSelectableOption option} of each variable \"select\"\ntype was selected for each {@link IShoppingSaleUnitStock stock} and which\n{@link IShoppingSaleUnitOptionCandidate candidate value} was selected within\nit.\n\nOf course, if the bound {@link IShoppingSaleUnit unit} does not have any\noptions, this entity can also be ignored." + }, + "IShoppingSaleInquiryComment.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest.ISearch" + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-created_at" + }, + { + "const": "+created_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the comments with pagination and searching/sorting options." + }, + "IShoppingSaleInquiryComment.IRequest.ISearch": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "IPageIShoppingSaleInquiryComment": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleInquiryComment": { + "type": "object", + "properties": { + "writer": { + "$ref": "#/components/schemas/IShoppingActorEntity", + "title": "Writer of the comment", + "description": "Writer of the comment.\n\nBoth customer and seller can write comment on the sale inquiry.\n\nBy the way, no restriction on the customer, but seller must be the\nperson who've registered the sale." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticleComment.ISnapshot" + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." + }, + "IShoppingActorEntity": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + }, + { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + }, + { + "$ref": "#/components/schemas/IShoppingCustomer" + } + ] + }, + "IBbsArticleComment.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "$ref": "#/components/schemas/IBbsArticleComment.Format", + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." + }, + "IBbsArticleComment.Format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ] + }, + "IAttachmentFile.ICreate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "minLength": 1, + "maxLength": 8 + } + ], + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "IShoppingSaleInquiryComment.ICreate": { + "type": "object", + "properties": { + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + }, + "IShoppingSaleInquiryComment.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "format": { + "$ref": "#/components/schemas/IBbsArticleComment.Format", + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot content of the comment." + }, + "IShoppingSaleQuestion.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingSaleInquiry.IRequest.ISearch", + "title": "Search conditions", + "description": "Search conditions." + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-created_at" + }, + { + "const": "+created_at" + }, + { + "const": "-nickname" + }, + { + "const": "-answered_at" + }, + { + "const": "-title" + }, + { + "const": "-updated_at" + }, + { + "const": "+nickname" + }, + { + "const": "+answered_at" + }, + { + "const": "+title" + }, + { + "const": "+updated_at" + } + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + }, + "IShoppingSaleInquiry.IRequest.ISearch": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ] + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + }, + "IPageIShoppingSaleQuestion.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.ISummary" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleQuestion.ISummary": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "Customer who wrote the inquiry", + "description": "Customer who wrote the inquiry." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISummary" + } + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller." + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the question." + }, + "IShoppingSaleInquiryAnswer.ISummary": { + "type": "object", + "properties": { + "seller": { + "$ref": "#/components/schemas/IShoppingSeller" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ] + }, + "IPageIShoppingSaleQuestion.IAbridge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IAbridge" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleQuestion.IAbridge": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "Customer who wrote the inquiry", + "description": "Customer who wrote the inquiry." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.IAbridge" + } + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller." + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "$ref": "#/components/schemas/IBbsArticle.Format", + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the question." + }, + "IShoppingSaleInquiryAnswer.IAbridge": { + "type": "object", + "properties": { + "seller": { + "$ref": "#/components/schemas/IShoppingSeller" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "$ref": "#/components/schemas/IBbsArticle.Format", + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ] + }, + "IBbsArticle.Format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ] + }, + "IShoppingSaleQuestion": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "type": { + "const": "question", + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "Customer who wrote the inquiry", + "description": "Customer who wrote the inquiry." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller." + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "secret", + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Question about sale snapshot.\n\n`IShoppingSaleQuestion` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} wants to ask something\nabout a {@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at\nthe time) registered by the {@link IShoppingSeller seller}.\n\nAnd, like most shopping malls, `IShoppingSaleQuestion` also provides\na {@link secret } attribute, allowing you to create a \"secret message\" that can\nonly be viewed by the seller and the customer who wrote the question." + }, + "IShoppingSaleInquiryAnswer": { + "type": "object", + "properties": { + "seller": { + "$ref": "#/components/schemas/IShoppingSeller", + "title": "Seller who've written the answer", + "description": "Seller who've written the answer." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Answers to questions about sale snapshots.\n\n`IShoppingSaleInquiryAnswer` is an entity that embodies the official\nanswer written by the {@link IShoppingSeller seller} to the\n{@link IShoppingSaleInquiry inquiry} written by the\n{@link IShoppingCustomer customer}.\n\nOf course, in addition to writing an official response like this, it is\nalso possible for the seller to communicate with the inqjuiry written\ncustomer and multiple customers through\n{@link IShoppingSaleInquiryComment comments} in the attribution inquiry.\n\nFor refererence, it is not possible to write comments on this answer.\nEncourage people to write comments on the inquiry article. This is to\nprevent comments from being scattered in both inquiry and answer\narticles." + }, + "IBbsArticle.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "$ref": "#/components/schemas/IBbsArticle.Format", + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "IShoppingSaleReview.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest.ISearch", + "title": "Search conditions", + "description": "Search conditions." + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-created_at" + }, + { + "const": "+created_at" + }, + { + "const": "-nickname" + }, + { + "const": "-answered_at" + }, + { + "const": "-title" + }, + { + "const": "-updated_at" + }, + { + "const": "+nickname" + }, + { + "const": "+answered_at" + }, + { + "const": "+title" + }, + { + "const": "+updated_at" + }, + { + "const": "-score" + }, + { + "const": "+score" + } + ] + }, + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of summarized informations with pagination searching/sorting options." + }, + "IShoppingSaleReview.IRequest.ISearch": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "answered": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ] + }, + "title": { + "type": "string" + }, + "body": { + "type": "string" + }, + "title_or_body": { + "type": "string" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "IPageIShoppingSaleReview.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISummary" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleReview.ISummary": { + "type": "object", + "properties": { + "score": { + "type": "number", + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "Customer who wrote the inquiry", + "description": "Customer who wrote the inquiry." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISummary" + } + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller." + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the review." + }, + "IPageIShoppingSaleReview.IAbridge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.IAbridge" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleReview.IAbridge": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "Customer who wrote the inquiry", + "description": "Customer who wrote the inquiry." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.IAbridge" + } + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller." + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + }, + "format": { + "$ref": "#/components/schemas/IBbsArticle.Format", + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the review." + }, + "IShoppingSaleReview": { + "type": "object", + "properties": { + "type": { + "const": "review", + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "Customer who wrote the inquiry", + "description": "Customer who wrote the inquiry." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller." + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISnapshot" + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "Reviews for sale snapshots.\n\n`IShoppingSaleReview` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} purchases a\n{@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at the time)\nregistered by the {@link IShoppingSeller seller} as a product and leaves a\nreview and rating for it.\n\nFor reference, `IShoppingSaleReview` and\n{@link IShoppingOrderGod shopping_order_goods} have a logarithmic relationship\nof N: 1, but this does not mean that customers can continue to write reviews\nfor the same product indefinitely. Wouldn't there be restrictions, such as\nif you write a review once, you can write an additional review a month later?" + }, + "IShoppingSaleReview.ISnapshot": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "$ref": "#/components/schemas/IBbsArticle.Format", + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot content of the review article." + }, + "IPage.IRequest": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Page request data" + }, + "IPageIShoppingSaleSnapshot.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot.ISummary" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleSnapshot.ISummary": { + "type": "object", + "properties": { + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange", + "title": "Price range of the unit", + "description": "Price range of the unit." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key of Sale", + "description": "Primary Key of Sale." + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "Primary Key of Snapshot", + "description": "Primary Key of Snapshot." + }, + "latest": { + "type": "boolean", + "title": "Whether the snapshot is the latest one or not", + "description": "Whether the snapshot is the latest one or not." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", + "title": "Description and image content describing the sale", + "description": "Description and image content describing the sale." + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "List of channels and categories", + "description": "List of channels and categories.\n\nWhich channels and categories the sale is registered to." + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "List of search tags", + "description": "List of search tags." + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ISummary" + }, + "minItems": 1, + "title": "List of units", + "description": "List of units.\n\nRecords about individual product composition informations that are sold\nin the sale. Each {@link IShoppingSaleUnit unit} record has configurable\n{@link IShoppingSaleUnitOption options},\n{@link IShoppingSaleUnitOptionCandidate candidate} values for each\noption, and {@link IShoppingSaleUnitStock final stocks} determined by\nselecting every candidate values of each option." + } + }, + "required": [ + "price_range", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units" + ], + "description": "Summarized information of the sale snapshot." + }, + "IShoppingSaleSnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key of Sale", + "description": "Primary Key of Sale." + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "Primary Key of Snapshot", + "description": "Primary Key of Snapshot." + }, + "latest": { + "type": "boolean", + "title": "Whether the snapshot is the latest one or not", + "description": "Whether the snapshot is the latest one or not." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent", + "title": "Description and image content describing the sale", + "description": "Description and image content describing the sale." + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "List of channels and categories", + "description": "List of channels and categories.\n\nWhich channels and categories the sale is registered to." + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "List of search tags", + "description": "List of search tags." + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit" + }, + "minItems": 1, + "title": "List of units", + "description": "List of units.\n\nRecords about individual product composition informations that are sold\nin the sale. Each {@link IShoppingSaleUnit unit} record has configurable\n{@link IShoppingSaleUnitOption options},\n{@link IShoppingSaleUnitOptionCandidate candidate} values for each\noption, and {@link IShoppingSaleUnitStock final stocks} determined by\nselecting every candidate values of each option." + } + }, + "required": [ + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units" + ], + "description": "Snapshot record of sale.\n\n`IShoppingSaleSnapshot` is an entity that embodies a snapshot of a sale,\nand the ERD (Entity Relationship Diagram) describes the role of the\n`shopping_sale_snapshots` table as follows:\n\n> {@link IShoppingSale shopping_sales} is an entity that embodies\n> \"product sales\" (sales) information registered by the\n> {@link IShoppingSeller seller}. And the main information of the sale is\n> recorded in the sub `shopping_sale_snapshots`, not in the main\n> {@link IShoppingSale shopping_sales}. When a seller changes a previously\n> registered item, the existing {@link IShoppingSale shopping_sales} record\n> is not changed, but a new snapshot record is created.\n>\n> This is to preserve the {@link IShoppingCustomer customer}'s\n> {@link IShoppingOrder purchase history} flawlessly after the customer\n> purchases a specific item, even if the seller changes the components or price\n> of the item. It is also intended to support sellers in so-called A/B testing,\n> which involves changing components or prices and measuring the performance\n> in each case.\n\nBy the way, DTO (Data Transfer Object) level used by the front-end developer,\nit does not distinguish {@link IShoppingSale } and `IShoppingSaleSnapshot`\nstrictly, and generally handles {@link IShoppingSale } and snapshot together.\n\nBut even though the DTO level does not strictly distinguish them, the word and\nconcept of \"snapshot\" is still important, so it is recommended to understand\nthe concept of \"snapshot\" properly." + }, + "IShoppingChannelCategory.ICreate": { + "type": "object", + "properties": { + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "Parent category's ID", + "description": "Parent category's ID." + }, + "name": { + "type": "string", + "title": "Representative name of the category", + "description": "Representative name of the category.\n\nThe name must be unique within the parent category. If no parent exists,\nthen the name must be unique within the channel between no parent\ncategories." + } + }, + "required": [ + "parent_id", + "name" + ], + "description": "Creation information of the category." + }, + "IShoppingChannelCategory": { + "type": "object", + "properties": { + "parent": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + ], + "title": "Parent category info", + "description": "Parent category info." + }, + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + }, + "title": "List of children categories with hierarchical structure", + "description": "List of children categories with hierarchical structure." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "Parent category's ID", + "description": "Parent category's ID." + }, + "name": { + "type": "string", + "title": "Representative name of the category", + "description": "Representative name of the category.\n\nThe name must be unique within the parent category. If no parent exists,\nthen the name must be unique within the channel between no parent\ncategories." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "parent", + "children", + "id", + "parent_id", + "name", + "created_at" + ], + "description": "Category of channel.\n\n`IShoppingChannelCategory` is a concept that refers to classification\ncategories within a specific {@link IShoppingChannel channel}, and is exactly\nthe same as the concept commonly referred to as \"category\" in shopping malls.\n\nAnd `IShoppingChannelCategory` is different with {@link IShoppingSection }.\n{@link IShoppingSection } refers to a \"corner\" that is independent spatial\ninformation in the offline market, which cannot simultaneously classified in\na {@link IShoppingSale sale}. Besides, `IShoppingChannelCategory` can be\nclassified into multiple categories in a sale simultaneously.\n\nProduct\t| Section (corner) | Categories\n---------|------------------|-----------------------------------\nBeef\t | Butcher corner | Frozen food, Meat, Favorite food\nGrape | Fruit corner | Fresh food, Favorite food\n\nIn addition, as `IShoppingChannelCategory` has 1:N self recursive relationship,\nit is possible to express below hierarchical structures. Thus, each channel\ncan set their own category classification as they want.\n\n- Food > Meat > Frozen\n- Electronics > Notebook > 15 inches\n- Miscellaneous > Wallet\n\nFurthermore, `IShoppingChannelCategory` is designed to merge between themselves,\nso there is no burden to edit the category at any time." + }, + "IShoppingChannelCategory.IHierarchical": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + }, + "title": "List of children categories with hierarchical structure", + "description": "List of children categories with hierarchical structure." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "Parent category's ID", + "description": "Parent category's ID." + }, + "name": { + "type": "string", + "title": "Representative name of the category", + "description": "Representative name of the category.\n\nThe name must be unique within the parent category. If no parent exists,\nthen the name must be unique within the channel between no parent\ncategories." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "children", + "id", + "parent_id", + "name", + "created_at" + ], + "description": "Hierarchical category information with children categories." + }, + "IRecordMerge": { + "type": "object", + "properties": { + "keep": { + "type": "string", + "format": "uuid", + "title": "Target record to keep after merging", + "description": "Target record to keep after merging.\n\nAfter merge process, {@link absorbed } records would be merged into\nthis {@link keep } record." + }, + "absorbed": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "To be absorbed to {@link keep } after merging", + "description": "To be absorbed to {@link keep } after merging." + } + }, + "required": [ + "keep", + "absorbed" + ], + "description": "Record Merge DTO.\n\n`IRecordMerge` is a structure for merging records.\n\nThe `merge` means that merging multiple {@link IRecordMerge.absorbed }\nrecords into {@link IRecordMerge.keep } instead of deleting\n{@link IRecordMerge.absorbed } records.\n\nIf there're some dependent tables of the target `table` having\nunique constraint on foriegn key column, such dependent tables\nalso perform the merge process, too.\n\nOf course, if there're another dependent tables under those\ndependents, they also perform the merge process recursively as well.\nSuch recursive merge process still works for self-recursive\n(tree-structured) tables." + }, + "IShoppingChannel.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "code", + "name" + ], + "description": "Creation information of the channel." + }, + "IShoppingChannel.IUpdate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "name" + ], + "description": "Updating information of the channel." + }, + "IShoppingChannel.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest.ISearch" + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-channel.code" + }, + { + "const": "-channel.name" + }, + { + "const": "-channel.created_at" + }, + { + "const": "+channel.code" + }, + { + "const": "+channel.name" + }, + { + "const": "+channel.created_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the channels with pagination and searching/sorting options." + }, + "IShoppingChannel.IRequest.ISearch": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "IPageIShoppingChannel": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannel" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IPageIShoppingChannel.IHierarchical": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingChannel.IHierarchical": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + }, + "title": "Children categories with hierarchical structure", + "description": "Children categories with hierarchical structure." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "categories", + "id", + "created_at", + "code", + "name" + ], + "description": "Hierarchical channel information with children categories." + }, + "IShoppingSection.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + } + }, + "required": [ + "code", + "name" + ], + "description": "Creation information of the section." + }, + "IShoppingSection.IUpdate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + } + }, + "required": [ + "name" + ], + "description": "Updating information of the section." + }, + "IShoppingSection.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingSection.IRequest.ISearch" + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-section.code" + }, + { + "const": "-section.name" + }, + { + "const": "-section.created_at" + }, + { + "const": "+section.code" + }, + { + "const": "+section.name" + }, + { + "const": "+section.created_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request of the sections with pagination and searching/sorting options." + }, + "IShoppingSection.IRequest.ISearch": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "IPageIShoppingSection": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSection" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingCustomer.IRefresh": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + }, + "IShoppingCustomer.IAuthorized": { + "type": "object", + "properties": { + "setHeaders": { + "type": "object", + "properties": { + "Authorization": { + "type": "string" + } + }, + "required": [ + "Authorization" + ] + }, + "token": { + "$ref": "#/components/schemas/IShoppingCustomer.IToken" + }, + "type": { + "const": "customer", + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMember" + } + ], + "title": "Membership information", + "description": "Membership information.\n\nIf the customer has joined as a member." + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "Citizen information", + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "Belonged channel", + "description": "Belonged channel." + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser" + } + ], + "title": "External user information", + "description": "External user information.\n\nWhen the customer has come frome an external service." + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href } of client." + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "setHeaders", + "token", + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ] + }, + "IShoppingCustomer.IToken": { + "type": "object", + "properties": { + "access": { + "type": "string" + }, + "refresh": { + "type": "string" + }, + "expired_at": { + "type": "string", + "format": "date-time" + }, + "refreshable_until": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "access", + "refresh", + "expired_at", + "refreshable_until" + ] + }, + "IShoppingCustomer.ICreate": { + "type": "object", + "properties": { + "channel_code": { + "type": "string" + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser.ICreate" + } + ] + }, + "href": { + "type": "string", + "format": "uri" + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ] + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ] + } + }, + "required": [ + "channel_code", + "external_user", + "href", + "referrer" + ] + }, + "IShoppingExternalUser.ICreate": { + "type": "object", + "properties": { + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen.ICreate" + } + ], + "title": "Citizen activation info", + "description": "Citizen activation info." + }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + }, + "uid": { + "type": "string", + "title": "Identifier key of external user from the external system", + "description": "Identifier key of external user from the external system." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "password": { + "type": "string", + "title": "Password of external user from the external system", + "description": "Password of external user from the external system.\n\nThis is a password issued to the user by an external service,\nand is by no means the actual user password. However, for\n{@link IShoppingCustomer customers} who entered the same\napplication and code as the current external system user, this is\nto determine whether to view this as a correct external system\nuser or a violation." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "citizen", + "application", + "uid", + "nickname", + "password", + "data" + ], + "description": "Creation information of external user." + }, + "IShoppingCitizen.ICreate": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "mobile", + "name" + ], + "description": "Creation information of citizen verification." + }, + "IShoppingMember.IJoin": { + "type": "object", + "properties": { + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen.ICreate" + } + ], + "title": "Citizen information", + "description": "Citizen information." + }, + "email": { + "type": "string", + "format": "email", + "title": "Email address of member", + "description": "Email address of member.\n\nIf the member has multiple email addresses, just use one of them." + }, + "password": { + "type": "string", + "title": "Password of the member account", + "description": "Password of the member account." + } + }, + "required": [ + "nickname", + "citizen", + "email", + "password" + ], + "description": "Joining request info." + }, + "IShoppingMember.IPasswordChange": { + "type": "object", + "properties": { + "oldbie": { + "type": "string", + "title": "Current password", + "description": "Current password." + }, + "newbie": { + "type": "string", + "title": "The new password to change", + "description": "The new password to change." + } + }, + "required": [ + "oldbie", + "newbie" + ], + "description": "Request info of password change." + }, + "IShoppingCouponTicket.IRequest": { + "type": "object", + "properties": { + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-ticket.created_at" + }, + { + "const": "-ticket.expired_at" + }, + { + "const": "+ticket.created_at" + }, + { + "const": "+ticket.expired_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + }, + "IPageIShoppingCouponTicket": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingCouponTicket.ICreate": { + "type": "object", + "properties": { + "coupon_id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "coupon_id" + ] + }, + "IShoppingDepositCharge.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingDepositCharge.IRequest.ISearch" + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-created_at" + }, + { + "const": "+created_at" + }, + { + "const": "-value" + }, + { + "const": "-publish.created_at" + }, + { + "const": "-publish.paid_at" + }, + { + "const": "+value" + }, + { + "const": "+publish.created_at" + }, + { + "const": "+publish.paid_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + }, + "IShoppingDepositCharge.IRequest.ISearch": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number" + }, + "maximum": { + "type": "number" + }, + "state": { + "oneOf": [ + { + "const": "pending" + }, + { + "const": "published" + }, + { + "const": "payed" + }, + { + "const": "cancelled" + } + ] + }, + "publish": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "payment": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "required": [ + "state" + ] + }, + "IPageIShoppingDepositCharge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDepositCharge" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingDepositCharge": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer" + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingDepositChargePublish" + } + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "value": { + "type": "number" + } + }, + "required": [ + "id", + "customer", + "publish", + "created_at", + "value" + ] + }, + "IShoppingDepositChargePublish": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "paid_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + }, + "cancelled_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at" + ] + }, + "IShoppingDepositCharge.ICreate": { + "type": "object", + "properties": { + "value": { + "type": "number" + } + }, + "required": [ + "value" + ] + }, + "IShoppingDepositChargePublish.ICreate": { + "type": "object", + "properties": { + "vendor": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "vendor", + "uid" + ] + }, + "IShoppingDepositHistory.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingDepositHistory.IRequest.ISearch" + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-deposit.source" + }, + { + "const": "-deposit.code" + }, + { + "const": "-deposit.direction" + }, + { + "const": "+deposit.source" + }, + { + "const": "+deposit.code" + }, + { + "const": "+deposit.direction" + }, + { + "const": "-history.value" + }, + { + "const": "-history.created_at" + }, + { + "const": "+history.value" + }, + { + "const": "+history.created_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + }, + "IShoppingDepositHistory.IRequest.ISearch": { + "type": "object", + "properties": { + "deposit": { + "$ref": "#/components/schemas/IShoppingDeposit.IRequest.ISearch" + }, + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + } + } + }, + "IPageIShoppingDepositHistory": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDepositHistory" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingDepositHistory": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen" + }, + "deposit": { + "$ref": "#/components/schemas/IShoppingDeposit" + }, + "source_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "citizen", + "deposit", + "source_id", + "value", + "balance", + "created_at" + ] + }, + "IShoppingMileageHistory.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingMileageHistory.IRequest.ISearch" + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-mileage.source" + }, + { + "const": "-mileage.code" + }, + { + "const": "-mileage.direction" + }, + { + "const": "+mileage.source" + }, + { + "const": "+mileage.code" + }, + { + "const": "+mileage.direction" + }, + { + "const": "-history.value" + }, + { + "const": "-history.created_at" + }, + { + "const": "+history.value" + }, + { + "const": "+history.created_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + }, + "IShoppingMileageHistory.IRequest.ISearch": { + "type": "object", + "properties": { + "mileage": { + "$ref": "#/components/schemas/IShoppingMileage.IRequest.ISearch" + }, + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + } + } + }, + "IPageIShoppingMileageHistory": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileageHistory" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingMileageHistory": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen" + }, + "mileage": { + "$ref": "#/components/schemas/IShoppingMileage" + }, + "source_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "citizen", + "mileage", + "source_id", + "value", + "balance", + "created_at" + ] + }, + "IShoppingCartCommodity.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingCartCommodity.IRequest.ISearch" + }, + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-seller.created_at" + }, + { + "const": "-seller.goods.payments.real" + }, + { + "const": "-seller.goods.publish_count" + }, + { + "const": "-seller.reviews.average" + }, + { + "const": "-seller.reviews.count" + }, + { + "const": "-goods.publish_count" + }, + { + "const": "-goods.payments.real" + }, + { + "const": "-reviews.average" + }, + { + "const": "-reviews.count" + }, + { + "const": "-sale.created_at" + }, + { + "const": "-sale.updated_at" + }, + { + "const": "-sale.opened_at" + }, + { + "const": "-sale.closed_at" + }, + { + "const": "-sale.content.title" + }, + { + "const": "-sale.price_range.lowest.real" + }, + { + "const": "-sale.price_range.highest.real" + }, + { + "const": "+seller.created_at" + }, + { + "const": "+seller.goods.payments.real" + }, + { + "const": "+seller.goods.publish_count" + }, + { + "const": "+seller.reviews.average" + }, + { + "const": "+seller.reviews.count" + }, + { + "const": "+goods.publish_count" + }, + { + "const": "+goods.payments.real" + }, + { + "const": "+reviews.average" + }, + { + "const": "+reviews.count" + }, + { + "const": "+sale.created_at" + }, + { + "const": "+sale.updated_at" + }, + { + "const": "+sale.opened_at" + }, + { + "const": "+sale.closed_at" + }, + { + "const": "+sale.content.title" + }, + { + "const": "+sale.price_range.lowest.real" + }, + { + "const": "+sale.price_range.highest.real" + }, + { + "const": "-commodity.price" + }, + { + "const": "-commodity.volume" + }, + { + "const": "-commodity.volumed_price" + }, + { + "const": "-commodity.created_at" + }, + { + "const": "+commodity.price" + }, + { + "const": "+commodity.volume" + }, + { + "const": "+commodity.volumed_price" + }, + { + "const": "+commodity.created_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + }, + "IShoppingCartCommodity.IRequest.ISearch": { + "type": "object", + "properties": { + "min_price": { + "type": "number" + }, + "max_price": { + "type": "number" + }, + "min_volumed_price": { + "type": "number" + }, + "max_volumed_price": { + "type": "number" + }, + "sale": { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" + } + } + }, + "IPageIShoppingCartCommodity": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodity" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingCartCommodity.ICreate": { + "type": "object", + "properties": { + "sale_id": { + "type": "string", + "format": "uuid", + "title": "Target sale's {@link IShoppingSale.id }", + "description": "Target sale's {@link IShoppingSale.id }." + }, + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodityStock.ICreate" + }, + "minItems": 1, + "title": "List of the stocks to be purchased", + "description": "List of the stocks to be purchased." + }, + "volume": { + "type": "integer", + "minimum": 1, + "title": "Volume of the commodity to purchase", + "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity } values." + }, + "accumulate": { + "type": "boolean", + "title": "Whether to accumulate the volume or not", + "description": "Whether to accumulate the volume or not.\n\nIf this attribute is not `false` and there's same commodity that\ncomposed with same stocks and options, then the volume will be\naccumulated to the existed one.\n\nOtherwise, duplicated commodity would be newly created." + } + }, + "required": [ + "sale_id", + "stocks", + "volume" + ], + "description": "Creation information of a shopping cart commodity." + }, + "IShoppingCartCommodityStock.ICreate": { + "type": "object", + "properties": { + "unit_id": { + "type": "string", + "format": "uuid", + "title": "Target unit's {@link IShoppingSaleUnit.id }", + "description": "Target unit's {@link IShoppingSaleUnit.id }." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "Target stock's {@link IShoppingSaleUnitStock.id }", + "description": "Target stock's {@link IShoppingSaleUnitStock.id }.\n\nIt must be matched with the {@link choices } property." + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodityStockChoice.ICreate" + }, + "title": "Creation information of the choices for each option", + "description": "Creation information of the choices for each option." + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "Quantity of the stock to purchase", + "description": "Quantity of the stock to purchase.\n\nThis value is multiplied by the {@link IShoppingCartCommodity.volume }." + } + }, + "required": [ + "unit_id", + "stock_id", + "choices", + "quantity" + ], + "description": "Creation information of the commodity stock of shopping cart.\n\nWhen record being created, its corresponding structure would be\n{@link IShoppingSaleSnapshotUnit.IInvert } and\n{@link IShoppingSaleSnapshotUnitStock.IInvert }." + }, + "IShoppingCartCommodityStockChoice.ICreate": { + "type": "object", + "properties": { + "option_id": { + "type": "string", + "format": "uuid", + "title": "Target option's {@link IShoppingSaleUnitOption.id }", + "description": "Target option's {@link IShoppingSaleUnitOption.id }." + }, + "candidate_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id }", + "description": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id }.\n\nWhen target option's type is `select`, then this attribute is not\n`null` but has a value." + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ], + "title": "Written value about the option", + "description": "Written value about the option.\n\nWhen target option's type is not `select`, but an atomic type value\nlike `boolean`, `number` or `string`, then this attribute is not\n`null` but has the matched atomic value." + } + }, + "required": [ + "option_id", + "candidate_id", + "value" + ], + "description": "Creation information of the choice for each option.\n\nWhen record being created, its corresponding structure would be\n{@link IShoppingSaleUnitStockChoice.IInvert }." + }, + "IShoppingCartCommodity.IUpdate": { + "type": "object", + "properties": { + "volume": { + "type": "integer", + "minimum": 1, + "title": "Volume of the commodity to purchase", + "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity } values." + } + }, + "required": [ + "volume" + ], + "description": "Update information of a shopping cart commodity." + }, + "IShoppingCartDiscountable.IRequest": { + "type": "object", + "properties": { + "commodity_ids": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + ] + }, + "pseudos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" + } + } + }, + "required": [ + "commodity_ids", + "pseudos" + ] + }, + "IShoppingCartDiscountable": { + "type": "object", + "properties": { + "deposit": { + "type": "number" + }, + "mileage": { + "type": "number" + }, + "combinations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartDiscountable.ICombination" + } + } + }, + "required": [ + "deposit", + "mileage", + "combinations" + ] + }, + "IShoppingCartDiscountable.ICombination": { + "type": "object", + "properties": { + "coupons": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + }, + "tickets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + }, + "entries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartDiscountable.IEntry" + } + }, + "amount": { + "type": "number" + } + }, + "required": [ + "coupons", + "tickets", + "entries", + "amount" + ] + }, + "IShoppingCartDiscountable.IEntry": { + "type": "object", + "properties": { + "commodity_id": { + "type": "string", + "format": "uuid" + }, + "pseudo": { + "type": "boolean" + }, + "coupon_id": { + "type": "string", + "format": "uuid" + }, + "amount": { + "type": "number" + } + }, + "required": [ + "commodity_id", + "pseudo", + "coupon_id", + "amount" + ] + }, + "IShoppingOrder.ICreate": { + "type": "object", + "properties": { + "goods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderGood.ICreate" + }, + "title": "List of goods in the order", + "description": "List of goods in the order." + } + }, + "required": [ + "goods" + ], + "description": "Creation information of the order appliance." + }, + "IShoppingOrderGood.ICreate": { + "type": "object", + "properties": { + "commodity_id": { + "type": "string", + "format": "uuid", + "title": "Target commodity's {@link IShoppingCartCommodity.id }", + "description": "Target commodity's {@link IShoppingCartCommodity.id }." + }, + "volume": { + "type": "integer", + "title": "Volume of the good", + "description": "Volume of the good.\n\nThe value multiplied to {@link IShoppingCartCommodityStock.quantity }.\nIt's purpose is exactly same with {@link IShoppingCartCommodity.volume },\nbut rewritten because the {@link IShoppingCartCommodity } records are reusable\nuntil payment." + } + }, + "required": [ + "commodity_id", + "volume" + ], + "description": "Creation information of the good." + }, + "IShoppingOrderDiscountable.IRequest": { + "type": "object", + "properties": { + "good_ids": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + ] + } + }, + "required": [ + "good_ids" + ] + }, + "IShoppingOrderDiscountable": { + "type": "object", + "properties": { + "deposit": { + "type": "number" + }, + "mileage": { + "type": "number" + }, + "combinations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable.ICombination" + } + } + }, + "required": [ + "deposit", + "mileage", + "combinations" + ] + }, + "IShoppingOrderDiscountable.ICombination": { + "type": "object", + "properties": { + "coupons": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + }, + "tickets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + }, + "entries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable.IEntry" + } + }, + "amount": { + "type": "number" + } + }, + "required": [ + "coupons", + "tickets", + "entries", + "amount" + ] + }, + "IShoppingOrderDiscountable.IEntry": { + "type": "object", + "properties": { + "good_id": { + "type": "string", + "format": "uuid" + }, + "coupon_id": { + "type": "string", + "format": "uuid" + }, + "amount": { + "type": "number" + } + }, + "required": [ + "good_id", + "coupon_id", + "amount" + ] + }, + "IShoppingOrderPrice.ICreate": { + "type": "object", + "properties": { + "deposit": { + "type": "number" + }, + "mileage": { + "type": "number" + }, + "coupon_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "deposit", + "mileage", + "coupon_ids" + ] + }, + "IShoppingOrderPublish.ICashCreate": { + "type": "object", + "properties": { + "type": { + "const": "cash" + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress.ICreate" + }, + "vendor": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "type", + "address", + "vendor", + "uid" + ] + }, + "IShoppingAddress.ICreate": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number to contact", + "description": "Mobile number to contact." + }, + "name": { + "type": "string", + "title": "Representative name of the address", + "description": "Representative name of the address.\n\nSometimes be receiver's name, and sometimes be place name." + }, + "country": { + "type": "string", + "title": "Country name", + "description": "Country name." + }, + "province": { + "type": "string", + "title": "Province name", + "description": "Province name." + }, + "city": { + "type": "string", + "title": "City name", + "description": "City name." + }, + "department": { + "type": "string", + "title": "Department name", + "description": "Department name." + }, + "possession": { + "type": "string", + "title": "Detailed address containing street name, building number, and room number", + "description": "Detailed address containing street name, building number, and room number." + }, + "zip_code": { + "type": "string", + "title": "Zip code, or postal code", + "description": "Zip code, or postal code." + }, + "special_note": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "Special description if required", + "description": "Special description if required." + } + }, + "required": [ + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ] + }, + "IShoppingOrderPublish.IZeroCreate": { + "type": "object", + "properties": { + "type": { + "const": "zero" + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress.ICreate" + } + }, + "required": [ + "type", + "address" + ] + }, + "IShoppingSaleQuestion.ICreate": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "secret", + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the question." + }, + "IBbsArticle.ICreate": { + "type": "object", + "properties": { + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the article." + }, + "IShoppingSaleReview.ICreate": { + "type": "object", + "properties": { + "good_id": { + "type": "string", + "format": "uuid", + "title": "Target good's {@link IShoppingOrderGood.id }", + "description": "Target good's {@link IShoppingOrderGood.id }." + }, + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "good_id", + "score", + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the review." + }, + "IShoppingSaleReview.IUpdate": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "format", + "title", + "body", + "files" + ], + "description": "Updating information of the review." + }, + "IShoppingSeller.IJoin": { + "type": "object", + "properties": {} + }, + "IShoppingDelivery.IRequest": { + "type": "object", + "properties": { + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-delivery.created_at" + }, + { + "const": "+delivery.created_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + } + }, + "IPageIShoppingDelivery.IInvert": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDelivery.IInvert" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingDelivery.IInvert": { + "type": "object", + "properties": { + "orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrder.IInvertFromDelivery" + }, + "minItems": 1, + "title": "List of orders of the delivery", + "description": "List of orders of the delivery." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller", + "title": "Seller who've delivered the goods", + "description": "Seller who've delivered the goods." + }, + "journeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney" + }, + "title": "List of journeys of the delivery", + "description": "List of journeys of the delivery." + }, + "pieces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece" + }, + "minItems": 1, + "title": "List of pieces of the delivery", + "description": "List of pieces of the delivery." + }, + "shippers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper" + }, + "title": "List of shippers of the delivery", + "description": "List of shippers of the delivery." + }, + "state": { + "$ref": "#/components/schemas/IShoppingDelivery.State", + "title": "State of the delivery", + "description": "State of the delivery." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "orders", + "id", + "seller", + "journeys", + "pieces", + "shippers", + "state", + "created_at" + ], + "description": "Invert information of the delivery." + }, + "IShoppingOrder.IInvertFromDelivery": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "Customer who've applied for the order", + "description": "Customer who've applied for the order." + }, + "goods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderGood" + }, + "minItems": 1, + "title": "List of goods in the order", + "description": "List of goods in the order." + }, + "price": { + "$ref": "#/components/schemas/IShoppingOrderPrice", + "title": "Price information including discounts", + "description": "Price information including discounts." + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish.IInvertFromDelivery" + } + ], + "title": "Order completion and payment information", + "description": "Order completion and payment information." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "id", + "customer", + "goods", + "price", + "publish", + "created_at" + ], + "description": "Invert information from delivery." + }, + "IShoppingOrderPublish.IInvertFromDelivery": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + }, + "paid_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Time when the order was paid", + "description": "Time when the order was paid." + }, + "cancelled_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Time when the payment was cancelled", + "description": "Time when the payment was cancelled." + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress", + "title": "Address where the {@link IShoppingOrderGood goods} to be delivered", + "description": "Address where the {@link IShoppingOrderGood goods} to be delivered." + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at", + "address" + ], + "description": "Invert information from the delivery." + }, + "IShoppingDelivery.ICreate": { + "type": "object", + "properties": { + "pieces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece.ICreate" + }, + "minItems": 1, + "title": "List of pieces of the delivery", + "description": "List of pieces of the delivery." + }, + "journeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.ICreate" + }, + "title": "List of journeys of the delivery", + "description": "List of journeys of the delivery.\n\nThis is initial data, and it is also possible to accumulate journey data\nafter the delivery creation." + }, + "shippers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper.ICreate" + }, + "title": "List of shippers of the delivery", + "description": "List of shippers of the delivery." + } + }, + "required": [ + "pieces", + "journeys", + "shippers" + ], + "description": "Creation information of the delivery." + }, + "IShoppingDeliveryPiece.ICreate": { + "type": "object", + "properties": { + "publish_id": { + "type": "string", + "format": "uuid", + "title": "Target order's {@link IShoppingOrderPublish.id }", + "description": "Target order's {@link IShoppingOrderPublish.id }." + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "Target good's {@link IShoppingOrderGood.id }", + "description": "Target good's {@link IShoppingOrderGood.id }." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "Target stock's {@link IShoppingSaleUnitStock.id }", + "description": "Target stock's {@link IShoppingSaleUnitStock.id }." + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "Quantity of the stock", + "description": "Quantity of the stock.\n\nIt can be precision value to express splitted shipping." + } + }, + "required": [ + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "Creation information of the delivery piece." + }, + "IShoppingDeliveryJourney.ICreate": { + "type": "object", + "properties": { + "type": { + "oneOf": [ + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + } + ], + "title": "Type of journey", + "description": "Type of journey.\n\n- preparing\n- manufacturing\n- shipping\n- delivering" + }, + "title": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "Title of journey", + "description": "Title of journey." + }, + "description": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "Description of journey", + "description": "Description of journey." + }, + "started_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Start time of the journey", + "description": "Start time of the journey." + }, + "completed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "Creation information of the delivery journey." + }, + "IShoppingDeliveryShipper.ICreate": { + "type": "object", + "properties": { + "company": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "company", + "name", + "mobile" + ] + }, + "IShoppingDeliveryPiece.IRequest": { + "type": "object", + "properties": { + "publish_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "publish_ids" + ] + }, + "IShoppingDeliveryJourney.IComplete": { + "type": "object", + "properties": { + "completed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "completed_at" + ], + "description": "Completion information of the delivery journey." + }, + "IShoppingSale.ICreate": { + "type": "object", + "properties": { + "section_code": { + "type": "string", + "title": "Belonged section's {@link IShoppingSection.code }", + "description": "Belonged section's {@link IShoppingSection.code }." + }, + "status": { + "oneOf": [ + { + "type": "null" + }, + { + "const": "paused" + }, + { + "const": "suspended" + } + ], + "title": "Initial status of the sale", + "description": "Initial status of the sale.\n\n`null` or `undefined`: No restriction\n`paused`: Starts with {@link ITimestamps.paused_at paused} status\n`suspended`: Starts with {@link ITimestamps.suspended_at suspended} status" + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Closing time of the sale", + "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.ICreate" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel.ICreate" + } + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ICreate" + }, + "minItems": 1 + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "section_code", + "opened_at", + "closed_at", + "content", + "channels", + "units", + "tags" + ], + "description": "Creation information of sale." + }, + "IShoppingSaleContent.ICreate": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ] + }, + "body": { + "type": "string" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + } + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + } + } + }, + "required": [ + "title", + "format", + "body", + "files", + "thumbnails" + ] + }, + "IShoppingSaleChannel.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "Target channel's {@link IShoppingChannel.code }", + "description": "Target channel's {@link IShoppingChannel.code }." + }, + "category_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "List of target categories' {@link IShoppingChannelCategory.id }s", + "description": "List of target categories' {@link IShoppingChannelCategory.id }s.\n\nIf empty, it means all categories of the channel is listing the sale." + } + }, + "required": [ + "code", + "category_ids" + ], + "description": "Creation information of the target channel (and categories) of sale to sell." + }, + "IShoppingSaleUnit.ICreate": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.ICreate" + } + ] + }, + "title": "List of options", + "description": "List of options." + }, + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStock.ICreate" + }, + "minItems": 1, + "title": "List of final stocks", + "description": "List of final stocks." + }, + "name": { + "type": "string", + "title": "Representative name of the unit", + "description": "Representative name of the unit." + }, + "primary": { + "type": "boolean", + "title": "Whether the unit is primary or not", + "description": "Whether the unit is primary or not.\n\nJust a labeling value." + }, + "required": { + "type": "boolean", + "title": "Whether the unit is required or not", + "description": "Whether the unit is required or not.\n\nWhen the unit is required, the customer must select the unit. If do not\nselect, customer can't buy it.\n\nFor example, if there's a sale \"Macbook Set\" and one of the unit is the\n\"Main Body\", is it possible to buy the \"Macbook Set\" without the\n\"Main Body\" unit? This property is for that case." + } + }, + "required": [ + "options", + "stocks", + "name", + "primary", + "required" + ], + "description": "Creation information of sale unit." + }, + "IShoppingSaleUnitDescriptiveOption.ICreate": { + "type": "object", + "properties": { + "type": { + "oneOf": [ + { + "const": "string" + }, + { + "const": "number" + }, + { + "const": "boolean" + } + ], + "title": "Type of descriptive option", + "description": "Type of descriptive option.\n\nWhich typed value should be written when purchasing." + }, + "name": { + "type": "string", + "title": "Readable name of the option", + "description": "Readable name of the option." + } + }, + "required": [ + "type", + "name" + ], + "description": "Creation information of the descriptive option." + }, + "IShoppingSaleUnitSelectableOption.ICreate": { + "type": "object", + "properties": { + "type": { + "const": "select", + "title": "Discriminant for the type of selectable option", + "description": "Discriminant for the type of selectable option." + }, + "name": { + "type": "string", + "title": "Represents the name of the option", + "description": "Represents the name of the option." + }, + "variable": { + "type": "boolean", + "title": "Whether the option is variable or not", + "description": "Whether the option is variable or not.\n\nWhen type of current option is \"select\", this attribute means whether\nselecting different candidate value affects the final stock or not." + }, + "candidates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate.ICreate" + }, + "minItems": 1, + "title": "List of candidate values", + "description": "List of candidate values." + } + }, + "required": [ + "type", + "name", + "variable", + "candidates" + ], + "description": "Creation information of the selectable option." + }, + "IShoppingSaleUnitOptionCandidate.ICreate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Represents the name of the candidate value", + "description": "Represents the name of the candidate value." + } + }, + "required": [ + "name" + ], + "description": "Creation information of the candidate value." + }, + "IShoppingSaleUnitStock.ICreate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Representative name of the stock", + "description": "Representative name of the stock." + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "Price of the stock", + "description": "Price of the stock." + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "Initial inventory quantity", + "description": "Initial inventory quantity." + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockChoice.ICreate" + }, + "title": "List of choices", + "description": "List of choices.\n\nWhich candidate values being chosen for each option." + } + }, + "required": [ + "name", + "price", + "quantity", + "choices" + ], + "description": "Creation information of the stock." + }, + "IShoppingSaleUnitStockChoice.ICreate": { + "type": "object", + "properties": { + "option_index": { + "type": "integer", + "description": "Target option's index number in\n{@link IShoppingSaleUnit.ICreate.options }." + }, + "candidate_index": { + "type": "integer", + "description": "Target candidate's index number in\n{@link IShoppingSaleUnitSelectableOption.ICreate.candidates }." + } + }, + "required": [ + "option_index", + "candidate_index" + ], + "description": "Creation information of stock choice." + }, + "IShoppingSaleSnapshot.ICreate": { + "type": "object", + "properties": { + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.ICreate" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel.ICreate" + } + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ICreate" + }, + "minItems": 1 + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "content", + "channels", + "units", + "tags" + ], + "description": "Creation information of the snapshot." + }, + "IShoppingSale.IUpdateOpeningTime": { + "type": "object", + "properties": { + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Closing time of the sale", + "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." + } + }, + "required": [ + "opened_at", + "closed_at" + ], + "description": "Update opening time information of sale." + }, + "IShoppingSaleInquiryAnswer.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "format": { + "$ref": "#/components/schemas/IBbsArticle.Format", + "title": "Format of body", + "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ] + }, + "IShoppingSaleUnitStockSupplement.IRequest": { + "type": "object", + "properties": { + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-created_at" + }, + { + "const": "+created_at" + } + ] + }, + "title": "Sortable columns", + "description": "Sortable columns." + }, + "page": { + "type": "integer", + "title": "Page number", + "description": "Page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "description": "Request information of the stock supplement list." + }, + "IPageIShoppingSaleUnitStockSupplement": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleUnitStockSupplement": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "integer", + "title": "Supplemented quantity", + "description": "Supplemented quantity." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record.\n\nAnother words, the time when inventory of the stock being supplemented." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Supplementation of inventory quantity of stock.\n\nYou know what? If a {@link IShoppingSaleUnitStock stock} has been sold over\nits {@link IShoppingSaleUnitStock.ICreate.quantity initial inventory quantity},\nthe stock can't be sold anymore, because of out of stock. In that case, how the\n{@link IShoppingSeller } should do?\n\nWhen the sotck is sold out, seller can supplement the inventory record by\nregistering this `IShoppingSaleUnitStockSupplement` record. Right, this\n`IShoppingSaleUnitStockSupplement` is an entity that embodies the\nsupplementation of the inventory quantity of the belonged stock." + }, + "IShoppingSaleUnitStockSupplement.ICreate": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "title": "Supplemented quantity", + "description": "Supplemented quantity." + } + }, + "required": [ + "value" + ], + "description": "Creation information of the supplement." + } + }, + "securitySchemes": { + "bearer": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + } + }, + "tags": [ + { + "name": "Monitor" + }, + { + "name": "Authenticate" + }, + { + "name": "Discount" + }, + { + "name": "Order" + }, + { + "name": "Sale" + }, + { + "name": "Systematic" + }, + { + "name": "Section" + } + ] +} \ No newline at end of file diff --git a/examples/swagger/toss.json b/examples/swagger/toss.json new file mode 100644 index 0000000..b9280da --- /dev/null +++ b/examples/swagger/toss.json @@ -0,0 +1,3471 @@ +{ + "openapi": "3.0.1", + "servers": [ + { + "url": "http://localhost:30771", + "description": "fake" + }, + { + "url": "https://api.tosspayments.com", + "description": "real" + } + ], + "info": { + "title": "Toss Payments API", + "description": "Built by [fake-toss-payments-server](https://github.com/samchon/fake-toss-payments-server) with [nestia](https://github.com/samchon/nestia)", + "version": "2.0.0", + "license": { + "name": "MIT" + } + }, + "paths": { + "/v1/billing/authorizations/card": { + "post": { + "tags": [], + "parameters": [], + "requestBody": { + "description": "간편 결제 카드 등록 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossBilling.IStore" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "간편 결제 카드 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossBilling" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "간편 결제 카드 등록하기", + "description": "간편 결제 카드 등록하기.\n\n`billing.authorizations.card.store` 는 고객이 자신의 신록 카드를 서버에 등록해두고,\n매번 결제가 필요할 때마다 카드 정보를 반복 입력하는 일 없이 간편하게 결제를\n진행하고자 할 때, 호출되는 API 함수이다.\n\n참고로 `billing.authorizations.card.store` 는 클라이언트 어플리케이션이 토스\n페이먼츠가 제공하는 간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를\n실 서비스에서 호출하는 일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는\n상황을 시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다.", + "security": [ + { + "basic": [] + } + ], + "x-nestia-namespace": "v1.billing.authorizations.card.store", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "간편 결제 카드 등록 정보", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "간편 결제 카드 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "basic", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + }, + "/v1/billing/authorizations/{billingKey}": { + "post": { + "tags": [], + "parameters": [ + { + "name": "billingKey", + "in": "path", + "schema": { + "type": "string" + }, + "description": "대상 정보의 ", + "required": true + } + ], + "requestBody": { + "description": "고객 식별자 키", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossBilling.ICustomerKey" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "간편 결제 수단 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossBilling" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "간편 결제로 등록한 수단 조회하기", + "description": "간편 결제로 등록한 수단 조회하기.\n\n`billing.authorizations.at` 은 고객이 간편 결제를 위하여 토스 페이먼츠 서버에\n등록한 결제 수단을 조회하는 함수이다.\n\n주로 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로 제공하는 결제 창을 사용하는\n경우, 그래서 프론트 어플리케이션이 귀하의 백엔드 서버에 `billingKey` 와` customerKey`\n만을 전달해주어, 상세 간편 결제 수단 정보가 필요할 때 사용한다.", + "security": [ + { + "basic": [] + } + ], + "x-nestia-namespace": "v1.billing.authorizations.at", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "billingKey", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "대상 정보의 ", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "ITossBilling.billingKey", + "kind": "linkName", + "target": { + "fileName": "C:/github/samchon/fake-toss-payments-server/src/api/structures/ITossBilling.ts", + "textSpan": { + "start": 500, + "length": 19 + } + } + }, + { + "text": "}", + "kind": "link" + } + ] + }, + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "고객 식별자 키", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "간편 결제 수단 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "basic", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + }, + "/v1/billing/{billingKey}": { + "post": { + "tags": [], + "parameters": [ + { + "name": "billingKey", + "in": "path", + "schema": { + "type": "string" + }, + "description": "간편 결제에 등록한 수단의 ", + "required": true + } + ], + "requestBody": { + "description": "주문 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossBilling.IPaymentStore" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "결제 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossPayment" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "간편 결제에 등록한 수단으로 결제하기", + "description": "간편 결제에 등록한 수단으로 결제하기.\n\n`billing.pay` 는 간편 결제에 등록한 수단으로 결제를 진행하고자 할 때 호출하는 API\n함수이다.\n\n그리고 `billing.pay` 는 결제 수단 중 유일하게, 클라이언트 어플리케이션이 토스\n페이먼츠가 제공하는 결제 창을 사용할 수 없어, 귀하의 백엔드 서버가 토스 페이먼츠의\nAPI 함수를 직접 호출해야 하는 경우에 해당한다. 따라서 간편 결제에 관련하여 토스\n페이먼츠와 연동하는 백엔드 서버 및 프론트 어플리케이션을 개발할 때, 반드시 이 상황에\n대한 별도의 설계 및 개발이 필요하니, 이 점을 염두에 두기 바란다.\n\n더하여 `billing.pay` 는 철저히 귀사 백엔드 서버의 판단 아래 호출되는 API 함수인지라,\n이를 통하여 이루어지는 결제는 일절 {@link payments.approve } 가 필요 없다. 다만\n`billing.pay` 는 이처럼 부차적인 승인 과정 필요없이 그 즉시로 결제가 완성되니, 이를\n호출하는 상황에 대하여 세심히 주의를 기울일 필요가 있다", + "security": [ + { + "basic": [] + } + ], + "x-nestia-namespace": "v1.billing.pay", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "billingKey", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "간편 결제에 등록한 수단의 ", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "ITossBilling.billingKey", + "kind": "linkName", + "target": { + "fileName": "C:/github/samchon/fake-toss-payments-server/src/api/structures/ITossBilling.ts", + "textSpan": { + "start": 500, + "length": 19 + } + } + }, + { + "text": "}", + "kind": "link" + } + ] + }, + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "주문 정보", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "결제 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "basic", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + }, + "/v1/cash-receipts": { + "post": { + "tags": [], + "parameters": [], + "requestBody": { + "description": "입력 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossCashReceipt.IStore" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "현금 영수증 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossCashReceipt" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "현금 영수증 발행하기", + "description": "현금 영수증 발행하기.", + "security": [ + { + "basic": [] + } + ], + "x-nestia-namespace": "v1.cash-receipts.store", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "입력 정보", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "현금 영수증 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "basic", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + }, + "/v1/cash-receipts/{receiptKey}/cancel": { + "post": { + "tags": [], + "parameters": [ + { + "name": "receiptKey", + "in": "path", + "schema": { + "type": "string" + }, + "description": "현금 영수증의 ", + "required": true + } + ], + "requestBody": { + "description": "취소 입력 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossCashReceipt.ICancel" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "취소된 현금 영수증 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossCashReceipt" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "현금 영수증 취소하기", + "description": "현금 영수증 취소하기.", + "security": [ + { + "basic": [] + } + ], + "x-nestia-namespace": "v1.cash-receipts.cancel.cancel", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "receiptKey", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "현금 영수증의 ", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "ITossCashReceipt.receiptKey", + "kind": "linkName", + "target": { + "fileName": "C:/github/samchon/fake-toss-payments-server/src/api/structures/ITossCashReceipt.ts", + "textSpan": { + "start": 199, + "length": 19 + } + } + }, + { + "text": "}", + "kind": "link" + } + ] + }, + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "취소 입력 정보", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "취소된 현금 영수증 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "basic", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + }, + "/internal/webhook": { + "post": { + "tags": [], + "parameters": [], + "requestBody": { + "description": "웹훅 이벤트 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossPaymentWebhook" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "", + "x-nestia-encrypted": false + } + }, + "summary": "웹훅 이벤트 더미 리스너", + "description": "웹훅 이벤트 더미 리스너.\n\n`internal.webhook` 은 실제 토스 페이먼츠의 결제 서버에는 존재하지 않는 API 로써,\n`fake-toss-payments-server` 의 {@link Configuration.WEBHOOK_URL } 에 아무런 URL 을\n설정하지 않으면, `fake-toss-payments-server` 로부터 발생하는 모든 종류의 웹훅\n이벤트는 이 곳으로 전달되어 무의미하게 사라진다.\n\n따라서 `fake-toss-payments-server` 를 사용하여 토스 페이먼츠 서버와의 연동을 미리\n검증코자 할 때는, 반드시 {@link Configuration.WEBHOOK_URL } 를 설정하여 웹훅\n이벤트가 귀하의 백엔드 서버로 제대로 전달되도록 하자.", + "x-nestia-namespace": "internal.webhook.webhook", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "웹훅 이벤트 정보", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + }, + "/internal/{paymentKey}/deposit": { + "get": { + "tags": [], + "parameters": [ + { + "name": "paymentKey", + "in": "path", + "schema": { + "type": "string" + }, + "description": "대상 가상 계좌 결제 정보의 ", + "required": true + } + ], + "responses": { + "200": { + "description": "입금 완료된 가상 꼐좌 결제 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossPayment" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "가상 계좌에 입금하기", + "description": "가상 계좌에 입금하기.\n\n`internal.virtual_accounts.deposit` 은 실제 토스 페이먼츠의 결제 서버에는 존재하지\n않는 API 로써, 가상 계좌 결제를 신청한 고객이, 이후 가상 계좌에 목표 금액을 입금하는\n상황을 시뮬레이션할 수 있는 함수이다.\n\n즉 `internal.virtual_accounts.deposit` 는 고객이 스스로에게 가상으로 발급된 계좌에\n입금을 하고, 그에 따라 토스 페이먼츠 서버에서 webhook 이벤트가 발생하여 이를 귀하의\n백엔드 서버로 전송하는 일련의 상황을 테스트하기 위한 함수인 셈이다.", + "security": [ + { + "basic": [] + } + ], + "x-nestia-namespace": "internal.deposit.deposit", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "paymentKey", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "대상 가상 계좌 결제 정보의 ", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "ITossPayment.paymentKey", + "kind": "linkName", + "target": { + "fileName": "C:/github/samchon/fake-toss-payments-server/src/api/structures/ITossPayment.ts", + "textSpan": { + "start": 2480, + "length": 19 + } + } + }, + { + "text": "}", + "kind": "link" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "입금 완료된 가상 꼐좌 결제 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "basic", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "GET" + } + }, + "/v1/payments/{paymentKey}": { + "get": { + "tags": [], + "parameters": [ + { + "name": "paymentKey", + "in": "path", + "schema": { + "type": "string" + }, + "description": "결제 정보의 ", + "required": true + } + ], + "responses": { + "200": { + "description": "결제 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossPayment" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "결제 정보 조회하기", + "description": "결제 정보 조회하기.\n\n`payments.at` 은 결제 정보를 조회하는 함수이다.\n\n주로 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로 제공하는 결제 창을 사용하는\n경우, 그래서 프론트 어플리케이션이 귀하의 백엔드 서버에 `paymentKey` 등 극히 일부의\n식별자 정보만을 전달해주어, 상세 결제 정보가 필요할 때 사용한다.\n\n참고로 토스 페이먼츠는 다른 결제 PG 사들과 다르게, 클라이언트 어플리케이션에서 토스\n페이먼츠의 결제 창을 이용하여 진행한 결제가 바로 확정되는 것은 아니다. 귀사의 백엔드\n서버가 현재의 `payments.at` 을 통하여 해당 결제 정보를 확인하고, {@link approve } 를\n호출하여 직접 승인하기 전까지, 해당 결제는 확정되지 않으니, 이 점에 유의하기 바란다.", + "x-nestia-namespace": "v1.payments.at", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "paymentKey", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "결제 정보의 ", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "ITossPayment.paymentKey", + "kind": "linkName", + "target": { + "fileName": "C:/github/samchon/fake-toss-payments-server/src/api/structures/ITossPayment.ts", + "textSpan": { + "start": 2480, + "length": 19 + } + } + }, + { + "text": "}", + "kind": "link" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "결제 정보", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "GET" + }, + "post": { + "tags": [], + "parameters": [ + { + "name": "paymentKey", + "in": "path", + "schema": { + "type": "string" + }, + "description": "대상 결제의 ", + "required": true + } + ], + "requestBody": { + "description": "주문 정보 확인", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossPayment.IApproval" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "승인된 결제 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossPayment" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "결제 승인하기", + "description": "결제 승인하기.\n\n토스 페이먼츠는 귀사의 백엔드에서 일어난 결제가 아닌 프론트 어플리케이션의 결제 창에서\n이루어진 결제의 경우, 해당 서비스으 백엔드 서버로부터 결제를 승인받기 전까지, 이를\n확정하지 않는다. `payments.approve` 는 바로 이러한 상황에서, 해당 결제를 승인해주는\n함수이다.\n\n만일 귀하가 `fake-toss-payments-server` 를 이용하여 결제를 시뮬레이션하는 경우라면,\n결제 관련 API 를 호출함에 있어 {@link ITossCardPayment.IStore.__approved } 내지\n{@link ITossVirtualAccountPayment.IStore.__approved } 를 `false` 로 함으로써, 별도\n승인이 필요한 이러한 상황을 시뮬레이션 할 수 있다.", + "security": [ + { + "basic": [] + } + ], + "x-nestia-namespace": "v1.payments.approve", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "paymentKey", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "대상 결제의 ", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "ITossPayment.paymentKey", + "kind": "linkName", + "target": { + "fileName": "C:/github/samchon/fake-toss-payments-server/src/api/structures/ITossPayment.ts", + "textSpan": { + "start": 2480, + "length": 19 + } + } + }, + { + "text": "}", + "kind": "link" + } + ] + }, + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "주문 정보 확인", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "승인된 결제 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "basic", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + }, + "/v1/payments/key-in": { + "post": { + "tags": [], + "parameters": [], + "requestBody": { + "description": "카드 결제 입력 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossCardPayment.IStore" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "카드 결제 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossCardPayment" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "카드로 결제하기", + "description": "카드로 결제하기.\n\n`payments.key_in` 은 카드를 이용한 결제를 할 때 호출되는 API 함수이다.\n\n참고로 `payments.key_in` 는 클라이언트 어플리케이션이 토스 페이먼츠가 자체적으로\n제공하는 결제 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는\n일은 없을 것이다. 다만, 고객이 카드를 통하여 결제하는 상황을 시뮬레이션하기 위하여,\n테스트 자동화 프로그램 수준에서 사용될 수는 있다.\n\n그리고 귀하의 백엔드 서버가 `payments.key-in` 을 직접 호출하는 경우, 토스 페이먼츠\n서버는 이를 완전히 승인된 결제로 보고 바로 확정한다. 때문에 `payments.key-in` 을\n직접 호출하는 경우, 토스 페이먼츠의 결제 창을 이용하여 별도의 {@link approve } 가\n필요한 때 대비, 훨씬 더 세심한 주의가 요구된다.\n\n더하여 만약 귀하의 백엔드 서버가 `fake-toss-payments-server` 를 이용하여 고객의\n카드 결제를 시뮬레이션하는 경우, {@link ITossCardPayment.IStore.__approved } 값을\n`false` 로 하여 카드 결제의 확정을 고의로 회피할 수 있다. 이를 통하여 토스\n페이먼츠의 결제 창을 이용한 카드 결제의 경우, 별도의 {@link approve } 가 필요한\n상황을 시뮬레이션 할 수 있다.", + "security": [ + { + "basic": [] + } + ], + "x-nestia-namespace": "v1.payments.key-in.key_in", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "카드 결제 입력 정보", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "카드 결제 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "basic", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + }, + "/v1/payments/{paymentKey}/cancel": { + "post": { + "tags": [], + "parameters": [ + { + "name": "paymentKey", + "in": "path", + "schema": { + "type": "string" + }, + "description": "결제 정보의 ", + "required": true + } + ], + "requestBody": { + "description": "취소 입력 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossPaymentCancel.IStore" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "취소된 결제 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossPayment" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "결제 취소하기", + "description": "결제 취소하기.\n\n`payments.cancel` 은 결제를 취소하는 API 이다.\n\n결제 취소 입력 정보 {@link ITossPaymentCancel.IStore } 에는 취소 사유를 비롯하여,\n고객에게 환불해 줄 금액과 부가세 및 필요시 환불 계좌 정보 등을 입력하게 되어있다.", + "security": [ + { + "basic": [] + } + ], + "x-nestia-namespace": "v1.payments.cancel.cancel", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "paymentKey", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "결제 정보의 ", + "kind": "text" + }, + { + "text": "{@link ", + "kind": "link" + }, + { + "text": "ITossPayment.paymentKey", + "kind": "linkName", + "target": { + "fileName": "C:/github/samchon/fake-toss-payments-server/src/api/structures/ITossPayment.ts", + "textSpan": { + "start": 2480, + "length": 19 + } + } + }, + { + "text": "}", + "kind": "link" + } + ] + }, + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "취소 입력 정보", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "취소된 결제 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "basic", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + }, + "/v1/virtual-accounts": { + "post": { + "tags": [], + "parameters": [], + "requestBody": { + "description": "가상 결제 신청 정보.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossVirtualAccountPayment.IStore" + } + } + }, + "required": true, + "x-nestia-encrypted": false + }, + "responses": { + "201": { + "description": "가상 계좌 결제 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ITossVirtualAccountPayment" + } + } + }, + "x-nestia-encrypted": false + } + }, + "summary": "가상 계좌로 결제 신청하기", + "description": "가상 계좌로 결제 신청하기.\n\n`virtual_accounts.store` 는 고객이 결제 수단을 가상 계좌로 선택하는 경우에 호출되는\nAPI 함수이다. 물론 고객이 이처럼 가상 계좌를 선택한 경우, 고객이 지정된 계좌에 돈을\n입금하기 전까지는 결제가 마무리된 것이 아니기에, {@link ITossPayment.status } 값은\n`WAITING_FOR_DEPOSIT` 이 된다.\n\n참고로 `virtual_accounts.store` 는 클라이언트 어플리케이션이 토스 페이먼츠가\n자체적으로 제공하는 결제 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서\n호출하는 일은 없을 것이다. 다만, 고객이 가상 계좌로 결제를 진행하는 상황을\n시뮬레이션하기 위하여, 테스트 자동화 프로그램 수준에서 사용될 수는 있다.\n\n그리고 `virtual_accounts.store` 이후에 고객이 지정된 계좌에 금액을 입금하거든, 토스\n페이먼츠 서버로부터 웹훅 이벤트가 발생되어 귀하의 백엔드 서버로 전송된다. 만약 연동\n대상 토스 페이먼츠 서버가 실제가 아닌 `fake-toss-payments-server` 라면,\n{@link internal.virtual_accounts.deposit } 를 호출하여, 고객이 가상 계좌에 입금하는\n상황을 시뮬레이션 할 수 있다.", + "security": [ + { + "basic": [] + } + ], + "x-nestia-namespace": "v1.virtual-accounts.store", + "x-nestia-jsDocTags": [ + { + "name": "param", + "text": [ + { + "text": "input", + "kind": "parameterName" + }, + { + "text": " ", + "kind": "space" + }, + { + "text": "가상 결제 신청 정보.", + "kind": "text" + } + ] + }, + { + "name": "returns", + "text": [ + { + "text": "가상 계좌 결제 정보", + "kind": "text" + } + ] + }, + { + "name": "security", + "text": [ + { + "text": "basic", + "kind": "text" + } + ] + }, + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ], + "x-nestia-method": "POST" + } + } + }, + "components": { + "schemas": { + "ITossBilling.IStore": { + "type": "object", + "properties": { + "cardNumber": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "cardExpirationYear": { + "description": "카드 만료 년도 (2 자리).", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{2}" + }, + "cardExpirationMonth": { + "description": "카드 만료 월 (2 자리).", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^(0[1-9]|1[012])$" + }, + "cardPassword": { + "description": "카드 비밀번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerBirthday": { + "description": "고객의 생년월일.\n\n표기 형식 YYMMDD.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "consumerName": { + "description": "고객의 이름.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customerEmail": { + "description": "고객의 이메일.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "vbv": { + "$ref": "#/components/schemas/__type" + }, + "customerKey": { + "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": false, + "required": [ + "cardNumber", + "cardExpirationYear", + "cardExpirationMonth", + "cardPassword", + "customerBirthday", + "customerKey" + ], + "description": "간편 결제 카드 등록 정보.", + "x-typia-jsDocTags": [] + }, + "__type": { + "type": "object", + "properties": { + "cavv": { + "description": "3D Secure 인증 세션에 대한 인증 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "xid": { + "description": "트랜잭션 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "eci": { + "description": "3DS 인증 결과에 대한 코드 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": false, + "required": [ + "cavv", + "xid", + "eci" + ], + "x-typia-jsDocTags": [] + }, + "ITossBilling": { + "type": "object", + "properties": { + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "billingKey": { + "description": "{@link ITossBilling } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "method": { + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "카드" + ] + }, + "cardCompany": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "cardNumber": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "authenticatedAt": { + "description": "인증 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "customerKey": { + "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": false, + "required": [ + "mId", + "billingKey", + "method", + "cardCompany", + "cardNumber", + "authenticatedAt", + "customerKey" + ], + "description": "간편 결제 등록 수단 정보.\n\n`ITossBilling` 은 간편 결제 등록 수단을 형상화한 자료구조 인터페이스로써, 고객이 자신의\n신용 카드를 서버에 등록해두고, 매번 결제가 필요할 때마다 카드 정보를 반복 입려하는 일\n없이 간편하게 결제를 진행하고자 할 때 사용한다.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "ITossBilling.ICustomerKey": { + "type": "object", + "properties": { + "customerKey": { + "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": false, + "required": [ + "customerKey" + ], + "description": "고객 식별자 정보.", + "x-typia-jsDocTags": [] + }, + "ITossBilling.IPaymentStore": { + "type": "object", + "properties": { + "method": { + "description": "결제 수단이 간편 결제임을 의미함.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "billing" + ] + }, + "billingKey": { + "description": "{@link IPaymentStore } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "customerKey": { + "description": "고객 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": false, + "required": [ + "method", + "billingKey", + "orderId", + "amount", + "customerKey" + ], + "description": "간편 결제를 이용한 결제 신청 정보.", + "x-typia-jsDocTags": [] + }, + "ITossPayment": { + "oneOf": [ + { + "$ref": "#/components/schemas/ITossCardPayment" + }, + { + "$ref": "#/components/schemas/ITossGiftCertificatePayment" + }, + { + "$ref": "#/components/schemas/ITossMobilePhonePayment" + }, + { + "$ref": "#/components/schemas/ITossTransferPayment" + }, + { + "$ref": "#/components/schemas/ITossVirtualAccountPayment" + } + ], + "description": "결제 정보.\n\n`ITossPayment` 는 토스 페이먼츠의 결제 정보를 형상화한 자료구조이자 유니언 타입의 \n인터페이스로써, if condition 을 통하여 method 값을 특정하면, 파생 타입이 자동으로\n지정된다.\n\n```typescript\nif (payment.method === \"카드\")\n payment.card; // payment be ITossCardPayment\n```", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "ITossCardPayment": { + "type": "object", + "properties": { + "card": { + "$ref": "#/components/schemas/ITossCardPayment.ICard" + }, + "discount": { + "$ref": "#/components/schemas/ITossCardPayment.IDiscount.Nullable" + }, + "easyPay": { + "description": "간편결제로 결제한 경우 간편결제 타입 정보.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "토스결제", + "페이코", + "삼성페이" + ], + "nullable": true + }, + "method": { + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "카드" + ] + }, + "type": { + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "NORMAL", + "BILLING" + ] + }, + "status": { + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ] + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "cultureExpense": { + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ITossPaymentCancel" + }, + "nullable": true + }, + "cashReceipt": { + "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable" + } + }, + "nullable": false, + "required": [ + "card", + "discount", + "easyPay", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "카드 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "ITossCardPayment.ICard": { + "type": "object", + "properties": { + "company": { + "description": "카드사 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "number": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "installmentPlanMonths": { + "description": "할부 개월 수.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "isInterestFree": { + "description": "무이자 할부 적용 여부.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "useCardPoint": { + "description": "카드 포인트 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean", + "enum": [ + false + ] + }, + "cardType": { + "description": "카드 타입.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "신용", + "체크", + "기프트" + ] + }, + "ownerType": { + "description": "카드의 소유자 타입.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "개인", + "법인" + ] + }, + "acquireStatus": { + "description": "카드 결제의 매입 상태.\n\n - READY: 매입 대기\n - REQUESTED: 매입 요청됨\n - COMPLETED: 매입 완료\n - CANCEL_REQUESTED: 매입 취소 요청됨\n - CANCELD: 매입 취소됨", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "READY", + "CANCELED", + "REQUESTED", + "COMPLETED", + "CANCEL_REQUESTED" + ] + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "url" + } + }, + "nullable": false, + "required": [ + "company", + "number", + "installmentPlanMonths", + "isInterestFree", + "approveNo", + "useCardPoint", + "cardType", + "ownerType", + "acquireStatus", + "receiptUrl" + ], + "description": "카드 정보.", + "x-typia-jsDocTags": [] + }, + "ITossCardPayment.IDiscount.Nullable": { + "type": "object", + "properties": { + "amount": { + "description": "카드사의 즉시 할인 프로모션을 적용한 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "nullable": true, + "required": [ + "amount" + ], + "description": "카드사의 즉시 할인 프로모션 정보.", + "x-typia-jsDocTags": [] + }, + "ITossPaymentCancel": { + "type": "object", + "properties": { + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxAmount": { + "description": "과세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "canceledAt": { + "description": "취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + } + }, + "nullable": false, + "required": [ + "cancelAmount", + "cancelReason", + "taxFreeAmount", + "taxAmount", + "refundableAmount", + "canceledAt" + ], + "description": "결제 취소 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "ITossCashReceipt.ISummary.Nullable": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/ITossCashReceipt.Type" + }, + "amount": { + "description": "현금 영수증 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리된 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "issueNumber": { + "description": "현금영수증 발급번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "receiptUrl": { + "description": "현금영수증 조회 페이지 주소.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": true, + "required": [ + "type", + "amount", + "taxFreeAmount", + "issueNumber", + "receiptUrl" + ], + "description": "현금 영수증 요약 정보.", + "x-typia-jsDocTags": [] + }, + "ITossCashReceipt.Type": { + "description": "현금 영수증의 종류.", + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ] + }, + "ITossGiftCertificatePayment": { + "type": "object", + "properties": { + "giftCertificate": { + "$ref": "#/components/schemas/ITossGiftCertificatePayment.IGiftCertificate" + }, + "method": { + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "상품권" + ] + }, + "type": { + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "NORMAL" + ] + }, + "status": { + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ] + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "cultureExpense": { + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ITossPaymentCancel" + }, + "nullable": true + }, + "cashReceipt": { + "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable" + } + }, + "nullable": false, + "required": [ + "giftCertificate", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "상품권 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "ITossGiftCertificatePayment.IGiftCertificate": { + "type": "object", + "properties": { + "approveNo": { + "description": "승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "COMPLETE", + "INCOMPLETE" + ] + } + }, + "nullable": false, + "required": [ + "approveNo", + "settlementStatus" + ], + "description": "상품권 정보.", + "x-typia-jsDocTags": [] + }, + "ITossMobilePhonePayment": { + "type": "object", + "properties": { + "mobilePhone": { + "$ref": "#/components/schemas/ITossMobilePhonePayment.IMobilePhone" + }, + "method": { + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "휴대폰" + ] + }, + "type": { + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "NORMAL" + ] + }, + "status": { + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ] + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "cultureExpense": { + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ITossPaymentCancel" + }, + "nullable": true + }, + "cashReceipt": { + "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable" + } + }, + "nullable": false, + "required": [ + "mobilePhone", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "휴대폰 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "ITossMobilePhonePayment.IMobilePhone": { + "type": "object", + "properties": { + "carrier": { + "description": "통신사.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerMobilePhone": { + "description": "고객 휴대폰 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ] + } + }, + "nullable": false, + "required": [ + "carrier", + "customerMobilePhone", + "settlementStatus" + ], + "description": "휴대폰 정보.", + "x-typia-jsDocTags": [] + }, + "ITossTransferPayment": { + "type": "object", + "properties": { + "transfer": { + "$ref": "#/components/schemas/ITossTransferPayment.ITransfer" + }, + "method": { + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "계좌이체" + ] + }, + "type": { + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "NORMAL" + ] + }, + "status": { + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ] + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "cultureExpense": { + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ITossPaymentCancel" + }, + "nullable": true + }, + "cashReceipt": { + "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable" + } + }, + "nullable": false, + "required": [ + "transfer", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "계좌 이체 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "ITossTransferPayment.ITransfer": { + "type": "object", + "properties": { + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "settlementStatus": { + "description": "이체 상태.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ] + } + }, + "nullable": false, + "required": [ + "bank", + "settlementStatus" + ], + "description": "계좌 이체 정보.", + "x-typia-jsDocTags": [] + }, + "ITossVirtualAccountPayment": { + "type": "object", + "properties": { + "secret": { + "description": "가상 계좌로 결제할 때 전달되는 입금 콜백을 검증하기 위한 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "virtualAccount": { + "$ref": "#/components/schemas/ITossVirtualAccountPayment.IVirtualAccount" + }, + "method": { + "description": "결제 수단.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "가상계좌" + ] + }, + "type": { + "description": "결제 타입.\n\n - NORMAL: 일반 결제\n - BILLING: 미리 등록한 카드에 의한 간편 결제.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "NORMAL" + ] + }, + "status": { + "description": "결제 상태.\n\n - READY\n - IN_PROGRESS\n - WAITING_FOR_DEPOSIT\n - DONE\n - CANCELED\n - PARTIAL_CANCELED\n - ABORTED\n - EXPIRED", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "READY", + "IN_PROGRESS", + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED", + "ABORTED", + "EXPIRED" + ] + }, + "mId": { + "description": "가맹점 ID.\n\n현재 tosspayments 가 쓰임.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "version": { + "description": "사용 중인 토스 페이먼츠 API 의 버전.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "paymentKey": { + "description": "결제 내역의 식별자 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "transactionKey": { + "description": "거래 건에 대한 고유한 키 값.\n\n{@link paymentKey } 와 달리, 이를 사용할 일은 없더라.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "currency": { + "description": "화폐 단위.\n\n현재 토스 페이먼츠는 KRW 만 사용 가능.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "totalAmount": { + "description": "총 결제 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "balanceAmount": { + "description": "취소할 수 있는 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "suppliedAmount": { + "description": "공급가액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "vat": { + "description": "부가세.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "useEscrow": { + "description": "에스크로 사용 여부.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "cultureExpense": { + "description": "문화비 지출 여부.\n\n도석입, 공연 티켓, 박물관/미술관 입장권 등.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "requestedAt": { + "description": "결제 요청 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "approvedAt": { + "description": "결제 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "cancels": { + "description": "결제 취소 내역.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ITossPaymentCancel" + }, + "nullable": true + }, + "cashReceipt": { + "$ref": "#/components/schemas/ITossCashReceipt.ISummary.Nullable" + } + }, + "nullable": false, + "required": [ + "secret", + "virtualAccount", + "method", + "type", + "status", + "mId", + "version", + "paymentKey", + "orderId", + "transactionKey", + "orderName", + "currency", + "totalAmount", + "balanceAmount", + "suppliedAmount", + "taxFreeAmount", + "vat", + "useEscrow", + "cultureExpense", + "requestedAt", + "approvedAt", + "cancels", + "cashReceipt" + ], + "description": "가상 계좌 결제 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "ITossVirtualAccountPayment.IVirtualAccount": { + "type": "object", + "properties": { + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountType": { + "description": "가상 계좌 타입.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "일반", + "고정" + ] + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "dueDate": { + "description": "입금 기한.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date" + }, + "expired": { + "description": "가상 계좌 만료 여부.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "boolean" + }, + "settlementStatus": { + "description": "정산 상태.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "COMPLETED", + "INCOMPLETED" + ] + }, + "refundStatus": { + "description": "환불 처리 상태.\n\n - NONE: 해당 없음\n - FAILED: 환불 실패\n - PENDING: 환불 처리중\n - PARTIAL_FAILED: 부분 환불 실패\n - COMPLETED: 환불 완료", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "COMPLETED", + "NONE", + "FAILED", + "PENDING", + "PARTIAL_FAILED" + ] + } + }, + "nullable": false, + "required": [ + "accountNumber", + "accountType", + "bank", + "customerName", + "dueDate", + "expired", + "settlementStatus", + "refundStatus" + ], + "description": "가상 계좌 정보.", + "x-typia-jsDocTags": [] + }, + "ITossCashReceipt.IStore": { + "type": "object", + "properties": { + "type": { + "description": "현금 영수증의 종류.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "소득공제", + "지출증빙" + ] + }, + "paymentKey": { + "description": "귀속 결제의 {@link ITossPayment.paymentKey }.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문의 식별자 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "registrationNumber": { + "description": "현금 영수증 발급을 위한 개인 식별 번호.\n\n현금 영수증의 종류에 따라 휴대폰 번호나 주민등록번호 또는 사업자등록번호 및 \n카드 번호를 입력할 수 있다.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "현금 영수증을 발행할 금액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 금액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "businessNumber": { + "description": "사업자 등록번호.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + } + }, + "nullable": false, + "required": [ + "type", + "paymentKey", + "orderId", + "orderName", + "registrationNumber", + "amount" + ], + "description": "현금 영수증 입력 정보.", + "x-typia-jsDocTags": [] + }, + "ITossCashReceipt": { + "type": "object", + "properties": { + "receiptKey": { + "description": "현금 영수증의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/ITossCashReceipt.Type" + }, + "orderId": { + "description": "주문의 식별자 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "approvalNumber": { + "description": "현금 영수증 승인 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "approvedAt": { + "description": "현금 영수증 승인 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time" + }, + "canceledAt": { + "description": "현금 영수증 취소 일시.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "format": "date-time", + "nullable": true + }, + "receiptUrl": { + "description": "영수증 URL.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": false, + "required": [ + "receiptKey", + "type", + "orderId", + "orderName", + "approvalNumber", + "approvedAt", + "canceledAt", + "receiptUrl" + ], + "description": "현금 영수증 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "ITossCashReceipt.ICancel": { + "type": "object", + "properties": { + "amount": { + "description": "취소 금액.\n\n미 입력시 현금 영수증에 기재된 {@link ITossCashReceipt.amount 총액}이 취소됨.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + } + }, + "nullable": false, + "description": "현금 영수증 취소 입력 정보.", + "x-typia-jsDocTags": [] + }, + "ITossPaymentWebhook": { + "type": "object", + "properties": { + "eventType": { + "description": "이벤트 타입.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "PAYMENT_STATUS_CHANGED" + ] + }, + "data": { + "$ref": "#/components/schemas/ITossPaymentWebhook.IData" + } + }, + "nullable": false, + "required": [ + "eventType", + "data" + ], + "description": "웹훅 이벤트 정보.", + "x-typia-jsDocTags": [ + { + "name": "author", + "text": [ + { + "text": "Jeongho Nam - https://github.com/samchon", + "kind": "text" + } + ] + } + ] + }, + "ITossPaymentWebhook.IData": { + "type": "object", + "properties": { + "paymentKey": { + "description": "{@link ITossPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "status": { + "description": "결제 상태.\n\n - DONE: 결제 완료\n - CANCELED: 결제가 취소됨\n - PARTIAL_CANCELED: 결제가 부분 취소됨\n - WAITING_FOR_DEPOSIT: 입금 대기 중", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "WAITING_FOR_DEPOSIT", + "DONE", + "CANCELED", + "PARTIAL_CANCELED" + ] + } + }, + "nullable": false, + "required": [ + "paymentKey", + "orderId", + "status" + ], + "description": "웹훅 이벤트 데이터.", + "x-typia-jsDocTags": [] + }, + "ITossCardPayment.IStore": { + "type": "object", + "properties": { + "method": { + "description": "결제 수단이 신용 카드임을 의미.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "card" + ] + }, + "cardNumber": { + "description": "카드 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "[0-9]{16}" + }, + "cardExpirationYear": { + "description": "카드 만료 년도 (2 자리).", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "\\d{2}" + }, + "cardExpirationMonth": { + "description": "카드 만료 월 (2 자리).", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^(0[1-9]|1[012])$" + }, + "cardPassword": { + "description": "카드 비밀번호.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "cardInstallmentPlan": { + "description": "할부 개월 수.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "amount": { + "description": "지불 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세금 총액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string" + }, + "customerBirthday": { + "description": "고객의 생년월일.\n\n표기 형식 YYMMDD.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "pattern": "^([0-9]{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])$" + }, + "customerEmail": { + "description": "고객의 이메일.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "string", + "format": "email" + }, + "vbv": { + "$ref": "#/components/schemas/__type.o1" + }, + "__approved": { + "description": "결제 승인 여부.\n\n오직 가짜 페이먼츠 서버 `fake-toss-payments-server` 에서만 사용되는 값으로써, \n결제 승인을 고의로 지연시키거나 할 때 사용된다. 이 값을 `false` 로 하면, 프론트 \n어플리케이션이 토스 페이먼츠가 제공해주는 결제 창을 사용하여 결제를 진행하는 \n상황을 시뮬레이션할 수 있다.\n\n본디 토스 페이먼츠 서버는 프론트 어플리케이션에서 백엔드 서버를 거치지 않고,\n토스 페이먼츠가 제공해주는 결제 창을 이용하여 직접 결제를 요청하는 경우, \n백엔드에서 이를 별도 {@link functional.payments.approve 승인} 처리해주기 전까지 \n정식 결제로 인청치 아니한다.\n\n반면 백엔드 서버에서 토스 페이먼츠 서버의 API 를 호출하는 경우, 토스 페이먼츠는\n이를 그 즉시로 승인해주기, `fake-toss-payments-server` 에서 별도의 승인 처리가\n필요한 상황을 시뮬레이션하기 위해서는 이러한 속성이 필요한 것.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "boolean" + } + }, + "nullable": false, + "required": [ + "method", + "cardNumber", + "cardExpirationYear", + "cardExpirationMonth", + "amount", + "orderId" + ], + "description": "신용 카드를 이용한 결제 신청 정보.", + "x-typia-jsDocTags": [] + }, + "__type.o1": { + "type": "object", + "properties": { + "cavv": { + "description": "3D Secure 인증 세션에 대한 인증 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "xid": { + "description": "트랜잭션 ID.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "eci": { + "description": "3DS 인증 결과에 대한 코드 값.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": false, + "required": [ + "cavv", + "xid", + "eci" + ], + "x-typia-jsDocTags": [] + }, + "ITossPayment.IApproval": { + "type": "object", + "properties": { + "orderId": { + "description": "주문 식별자 키.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + } + }, + "nullable": false, + "required": [ + "orderId", + "amount" + ], + "description": "결제 승인 정보.", + "x-typia-jsDocTags": [] + }, + "ITossPaymentCancel.IStore": { + "type": "object", + "properties": { + "paymentKey": { + "description": "{@link ITossPayment } 의 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "cancelReason": { + "description": "취소 사유.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "cancelAmount": { + "description": "취소 총액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "refundReceiveAccount": { + "$ref": "#/components/schemas/__type.o2" + }, + "taxAmount": { + "description": "과세 처리 금액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "taxFreeAmount": { + "description": "면세 처리 금액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + }, + "refundableAmount": { + "description": "결제 취소 후 환불 가능 잔액.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "number" + } + }, + "nullable": false, + "required": [ + "paymentKey", + "cancelReason" + ], + "description": "결제 취소 신청 정보.", + "x-typia-jsDocTags": [] + }, + "__type.o2": { + "type": "object", + "properties": { + "bank": { + "description": "은행 정보.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "accountNumber": { + "description": "계좌 번호.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "pattern": "^[0-9]{0,20}$" + }, + "holderName": { + "description": "예금주.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + } + }, + "nullable": false, + "required": [ + "bank", + "accountNumber", + "holderName" + ], + "x-typia-jsDocTags": [] + }, + "ITossVirtualAccountPayment.IStore": { + "type": "object", + "properties": { + "method": { + "description": "결제 수단이 가상 계좌임을 의미.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string", + "enum": [ + "virtual-account" + ] + }, + "orderId": { + "description": "주문 식별자 번호.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 자체적으로 관리하는 식별자 키.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "orderName": { + "description": "주문 이름.\n\n토스 페이먼츠가 아닌, 이를 이용하는 서비스에서 발급한 주문명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "bank": { + "description": "은행명.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "customerName": { + "description": "고객 이름.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "string" + }, + "amount": { + "description": "결제 총액.", + "x-typia-required": true, + "x-typia-optional": false, + "type": "number" + }, + "__approved": { + "description": "결제 승인 여부.\n\n오직 가짜 페이먼츠 서버 `fake-toss-payments-server` 에서만 사용되는 값으로써, \n결제 승인을 고의로 지연시키거나 할 때 사용된다. 이 값을 `false` 로 하면, 프론트 \n어플리케이션이 토스 페이먼츠가 제공해주는 결제 창을 사용하여 결제를 진행하는 \n상황을 시뮬레이션할 수 있다.\n\n본디 토스 페이먼츠 서버는 프론트 어플리케이션에서 백엔드 서버를 거치지 않고,\n토스 페이먼츠가 제공해주는 결제 창을 이용하여 직접 결제를 요청하는 경우, \n백엔드에서 이를 별도 {@link functional.payments.approve 승인} 처리해주기 전까지 \n정식 결제로 인청치 아니한다.\n\n반면 백엔드 서버에서 토스 페이먼츠 서버의 API 를 호출하는 경우, 토스 페이먼츠는\n이를 그 즉시로 승인해주기, `fake-toss-payments-server` 에서 별도의 승인 처리가\n필요한 상황을 시뮬레이션하기 위해서는 이러한 속성이 필요한 것.", + "x-typia-required": false, + "x-typia-optional": true, + "type": "boolean" + } + }, + "nullable": false, + "required": [ + "method", + "orderId", + "orderName", + "bank", + "customerName", + "amount" + ], + "description": "가상 계좌를 이용한 결제 신청 정보.", + "x-typia-jsDocTags": [] + } + }, + "securitySchemes": { + "basic": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + } + } +} \ No newline at end of file diff --git a/examples/swagger/uber.json b/examples/swagger/uber.json new file mode 100644 index 0000000..9577828 --- /dev/null +++ b/examples/swagger/uber.json @@ -0,0 +1,370 @@ +{ + "swagger": "2.0", + "info": { + "title": "Uber API", + "description": "Move your app forward with the Uber API", + "version": "1.0.0" + }, + "host": "api.uber.com", + "schemes": [ + "https" + ], + "basePath": "/v1", + "produces": [ + "application/json" + ], + "paths": { + "/products": { + "get": { + "summary": "Product Types", + "description": "The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order.", + "parameters": [ + { + "name": "latitude", + "in": "query", + "description": "Latitude component of location.", + "required": true, + "type": "number", + "format": "double" + }, + { + "name": "longitude", + "in": "query", + "description": "Longitude component of location.", + "required": true, + "type": "number", + "format": "double" + } + ], + "tags": [ + "Products" + ], + "responses": { + "200": { + "description": "An array of products", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Product" + } + } + }, + "default": { + "description": "Unexpected error", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + } + }, + "/estimates/price": { + "get": { + "summary": "Price Estimates", + "description": "The Price Estimates endpoint returns an estimated price range for each product offered at a given location. The price estimate is provided as a formatted string with the full price range and the localized currency symbol.

The response also includes low and high estimates, and the [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code for situations requiring currency conversion. When surge is active for a particular product, its surge_multiplier will be greater than 1, but the price estimate already factors in this multiplier.", + "parameters": [ + { + "name": "start_latitude", + "in": "query", + "description": "Latitude component of start location.", + "required": true, + "type": "number", + "format": "double" + }, + { + "name": "start_longitude", + "in": "query", + "description": "Longitude component of start location.", + "required": true, + "type": "number", + "format": "double" + }, + { + "name": "end_latitude", + "in": "query", + "description": "Latitude component of end location.", + "required": true, + "type": "number", + "format": "double" + }, + { + "name": "end_longitude", + "in": "query", + "description": "Longitude component of end location.", + "required": true, + "type": "number", + "format": "double" + } + ], + "tags": [ + "Estimates" + ], + "responses": { + "200": { + "description": "An array of price estimates by product", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/PriceEstimate" + } + } + }, + "default": { + "description": "Unexpected error", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + } + }, + "/estimates/time": { + "get": { + "summary": "Time Estimates", + "description": "The Time Estimates endpoint returns ETAs for all products offered at a given location, with the responses expressed as integers in seconds. We recommend that this endpoint be called every minute to provide the most accurate, up-to-date ETAs.", + "parameters": [ + { + "name": "start_latitude", + "in": "query", + "description": "Latitude component of start location.", + "required": true, + "type": "number", + "format": "double" + }, + { + "name": "start_longitude", + "in": "query", + "description": "Longitude component of start location.", + "required": true, + "type": "number", + "format": "double" + }, + { + "name": "customer_uuid", + "in": "query", + "type": "string", + "format": "uuid", + "description": "Unique customer identifier to be used for experience customization." + }, + { + "name": "product_id", + "in": "query", + "type": "string", + "description": "Unique identifier representing a specific product for a given latitude & longitude." + } + ], + "tags": [ + "Estimates" + ], + "responses": { + "200": { + "description": "An array of products", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Product" + } + } + }, + "default": { + "description": "Unexpected error", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + } + }, + "/me": { + "get": { + "summary": "User Profile", + "description": "The User Profile endpoint returns information about the Uber user that has authorized with the application.", + "tags": [ + "User" + ], + "responses": { + "200": { + "description": "Profile information for a user", + "schema": { + "$ref": "#/definitions/Profile" + } + }, + "default": { + "description": "Unexpected error", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + } + }, + "/history": { + "get": { + "summary": "User Activity", + "description": "The User Activity endpoint returns data about a user's lifetime activity with Uber. The response will include pickup locations and times, dropoff locations and times, the distance of past requests, and information about which products were requested.

The history array in the response will have a maximum length based on the limit parameter. The response value count may exceed limit, therefore subsequent API requests may be necessary.", + "parameters": [ + { + "name": "offset", + "in": "query", + "type": "integer", + "format": "int32", + "description": "Offset the list of returned results by this amount. Default is zero." + }, + { + "name": "limit", + "in": "query", + "type": "integer", + "format": "int32", + "description": "Number of items to retrieve. Default is 5, maximum is 100." + } + ], + "tags": [ + "User" + ], + "responses": { + "200": { + "description": "History information for the given user", + "schema": { + "$ref": "#/definitions/Activities" + } + }, + "default": { + "description": "Unexpected error", + "schema": { + "$ref": "#/definitions/Error" + } + } + } + } + } + }, + "definitions": { + "Product": { + "properties": { + "product_id": { + "type": "string", + "description": "Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles." + }, + "description": { + "type": "string", + "description": "Description of product." + }, + "display_name": { + "type": "string", + "description": "Display name of product." + }, + "capacity": { + "type": "string", + "description": "Capacity of product. For example, 4 people." + }, + "image": { + "type": "string", + "description": "Image URL representing the product." + } + } + }, + "PriceEstimate": { + "properties": { + "product_id": { + "type": "string", + "description": "Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles" + }, + "currency_code": { + "type": "string", + "description": "[ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code." + }, + "display_name": { + "type": "string", + "description": "Display name of product." + }, + "estimate": { + "type": "string", + "description": "Formatted string of estimate in local currency of the start location. Estimate could be a range, a single number (flat rate) or \"Metered\" for TAXI." + }, + "low_estimate": { + "type": "number", + "description": "Lower bound of the estimated price." + }, + "high_estimate": { + "type": "number", + "description": "Upper bound of the estimated price." + }, + "surge_multiplier": { + "type": "number", + "description": "Expected surge multiplier. Surge is active if surge_multiplier is greater than 1. Price estimate already factors in the surge multiplier." + } + } + }, + "Profile": { + "properties": { + "first_name": { + "type": "string", + "description": "First name of the Uber user." + }, + "last_name": { + "type": "string", + "description": "Last name of the Uber user." + }, + "email": { + "type": "string", + "description": "Email address of the Uber user" + }, + "picture": { + "type": "string", + "description": "Image URL of the Uber user." + }, + "promo_code": { + "type": "string", + "description": "Promo code of the Uber user." + } + } + }, + "Activity": { + "properties": { + "uuid": { + "type": "string", + "description": "Unique identifier for the activity" + } + } + }, + "Activities": { + "properties": { + "offset": { + "type": "integer", + "format": "int32", + "description": "Position in pagination." + }, + "limit": { + "type": "integer", + "format": "int32", + "description": "Number of items to retrieve (100 max)." + }, + "count": { + "type": "integer", + "format": "int32", + "description": "Total number of items available." + }, + "history": { + "type": "array", + "items": { + "$ref": "#/definitions/Activity" + } + } + } + }, + "Error": { + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "fields": { + "type": "string" + } + } + } + } +} \ No newline at end of file diff --git a/package.json b/package.json index 9ce6bf3..ab1a107 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,10 @@ "dev": "npm run build:test -- --watch", "test": "npm run test:api && npm run test:cli", "test:api": "node bin/test", - "test:cli": "node bin/src/executable/wofs.js --input test/swagger.json --output test/plain.json --keyword false" + "test:cli": "node bin/src/executable/wofs.js --input test/swagger.json --output test/plain.json --keyword false", + "package:latest": "ts-node deploy/index.ts --tag latest", + "package:next": "ts-node deploy/index.ts --tag next", + "examples": "ts-node deploy/examples.ts" }, "keywords": [ "openai",